【发布时间】:2013-10-31 14:31:12
【问题描述】:
这在许多情况下都有效,其中大多数变量都是整数,除非我想找到所有 10 位数字加起来,比如 45,然后它只给我一个零输出。然后,我将所有变量更改为 longs 以查看是否会有所作为,但事实并非如此。关于我应该做什么或目前做错了什么的任何想法?
感谢任何帮助。
我的程序如下:
long add_digits(long);
int main()
{
long digit, i, j, limit, l, n, sum=0, rem, result, counter=1;
printf("\nInput digits: ");
scanf("%d", &j);
printf("\nInput number: ");
scanf("%d", &i);
limit=pow(10,j);
for(n=1; n<limit; n++)
{
result = add_digits(n);
if(result==i)
counter++;
}
printf("\n%d\n", counter-1);
return 0;
}
long add_digits(long n)
{
static long sum = 0;
if (n == 0) {
return 0;
}
sum = n%10 + add_digits(n/10);
return sum;
}
【问题讨论】:
-
您是否尝试过使用
powl代替longs 而不是pow用于doubles ? -
您正在经历一百亿个数字。这对于现代 PC 来说只是小菜一碟,但想象一下您的方法适用于 100 位数字。不会工作那么快,是吗?不谈电费。有可能做得更好。
-
顺便说一句:建议从
static long sum = 0;中删除static
标签: c variables int long-integer