【发布时间】:2016-08-30 14:45:22
【问题描述】:
我需要找到一个数字的数字之和。比如数字1123的各位数字之和是1+1+2+3 =7
我的想法:
1)用户输入和整数
2)我计算数字中的位数(以上情况 - 4位)
3)与使用 for 循环相比,我将用户数除以 10 的 1,2 次方...直到位数(不包括最后一位)并将数字相加。
这是我的代码:
int main (void)
{
int result,sum,n;
int div = 10,counter = 0,number;
printf("Enter the integer:");
scanf("%i",&number);
while(result >0){
result = number/div;
div *= 10;
++counter;
}
printf("The number consists of %i digits\n",counter);
sum = 0;
for(n=1;n<counter;++n){
sum += number/pow(10,n);
}
printf("%i",sum);
return 0;
}
第一部分(while 循环)分别工作正确。但与第二部分(for 循环)一起,它给了我不正确的结果(while 循环中的 0 位数字,总和也为零)。你能解释为什么会这样吗? 如何更正我的解决方案?
P.S 我知道我的问题存在更有效的解决方案,但我想使用自己的算法。
【问题讨论】:
-
不要直接输入到 int 中。作为字符串输入。这使得长度计算变得微不足道,然后您将字符串视为 char aarray 并在各个数字上循环,将它们转换为 int 并加起来
-
除以
10的幂你不会得到数字。需要同时使用模数10。 -
div *= 10;一旦溢出就会出问题。 -
number < 0的问题没有明确定义。推荐unsigned number。