c - 找出数字的数字总和(在c中)

标签 c loops

我需要求出一个数字的数字之和。比如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/

相关文章:

C 代码审查 : Where is my mistake trying to solve this simple riddle?

java - 数据库中的循环与应用程序中的循环

c - 为什么我的反向函数在 C 中不起作用?

python - 在python中将列表中的项目分配给另一个列表中的项目

python - 无限递归和无限循环哪个更优化?

c - 在 C 中连接两个字符串的安全方法

c - 声明一个 long long 数组,大小为 unsigned int

Javascript for 循环和数组

c - 如何在 ARM/Linux 上使用 jemalloc

c - 需要 fgets 中的最后一个 '\0'