我需要求出一个数字的数字之和。比如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 我知道我的问题存在更有效的解决方案,但我想使用我自己的算法。
最佳答案
这里有几个问题:
- 当你第一次进入
while
循环时,result
还没有被初始化。试图读取未初始化的变量是 undefined behavior . - 做除法时,您并不是在加数字。您添加的是除以 10 的连续幂的数字。对于 1123,您实际上添加的是 112 + 11 + 1。您需要使用模而不是除法来获取数字。
您可以按如下方式在单个循环中添加和计算数字:
sum = 0;
while(number > 0){
sum += number % 10;
number /= 10;
++counter;
}
printf("The number consists of %i digits\n",counter);
printf("%i",sum);
关于c - 找出数字的数字总和(在c中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39230648/