简单的C语言程序单步调试不报错,运行报错。

题目描述水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)编写程序求出n位水仙花数的个数下面是我写的程序3位4位程序没有问题,但是5位及以上程序就不行了。但是5位用调试完美运行(跳着选点测试到99999),可以返回正确的值。

Stack overflow
报错的时候,选择调试,发现有如上的信息,Stack overflow 表示栈溢出
你使用递归的方法来计算,递归最让人诟病的地方就是在层次很深的情况下会消耗大量的栈内存,而一般只会给应用栈分配有限的大小
可以修改程序,使用迭代的方法,嵌套的两层for循环应该能解决问题。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-11-11
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
char buf[10];
unsigned long number;
int i = 0;
int len = 0;
int cur_bit;
scanf("%s",buf);
len = strlen(buf);
number = atol(buf);

for (i = 0; i < len; ++i)
{
cur_bit = buf[i] - '0';
number-=cur_bit*cur_bit*cur_bit;
}
if (number == 0)
{
printf("%s是水仙花数\n",buf);
}
else
{
printf("%s不是水仙花数\n",buf);
}
return 0;
}
相似回答