找到一个数字的总和(在c中)

时间:2016-08-30 14:45:22

标签: c loops

我需要找到一个数字的总和。例如,数字1123的数字之和是1 + 1 + 2 + 3 = 7

我的想法:

1)用户输入和整数

2)我计算了数字中的位数(以上情况--4位数)

3)比使用for循环我将用户数除以10 ...的功率直到数字位数(不包括最后一位)并将数字相加。

这是我的代码:

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我知道我的问题存在更有效的解决方案,但我想使用我自己的算法。

6 个答案:

答案 0 :(得分:2)

这里有几个问题:

  • 当您第一次进入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);

答案 1 :(得分:1)

更简单:

result = number;
sum = 0;
counter = 0;
while(result != 0){
    sum += result % 10;
    result /= 10;
    ++counter;
}

printf ("Counter:%d sum:%d\n", counter, sum);

答案 2 :(得分:1)

首先,为了获得最佳调试,请使用具有不同数字的数字,例如12345。

进行调试,计算和打印数字与累积数字分开。也就是说,不是sum += <... complex code ...>,而是这样做:

int digit = ...
printf("Next digit is %i\n", digit);
sum += digit;

另外(你应该通过调试发现这一点,但很明显可以直接注意),你的数字计算算法是错误的。做这样的事情:

int div = 1;
for (...)
{
    digit = number / div % 10;
    div *= 10;
}

请注意,我在此处不使用pow,因为pow使用浮点运算,其精度有限。如果int具有64位精度(不太可能但可能),浮点将计算大数字的无意义(它只有53位精度)。

答案 3 :(得分:0)

代码中存在许多错误,但总体而言整个方法都是错误的。计算数字是不必要的。

更简单的方法是:

unsigned temp = number, sum = 0;
while (temp) {
  sum += temp % 10;
  temp /= 10;
}

请注意,您知道何时停止循环,因为temp变为0(temp,因为条件等同于temp != 0)。您无需事先知道位数。

答案 4 :(得分:0)

如果使用您的代码,这将有效:

for(n=1;n<=counter;++n){
    sum += number%10;
    number /= 10;
}
printf("%d",sum);

答案 5 :(得分:0)

更简单的解决方案:

int c, n=0, sum=0;
printf("Enter number");
while((c=getchar())!='\n') {    // IMPORTANT: '\n' in unix, '\r' in windows
    if(c<'0' || c>'9') {
        printf("Bad value");
        break;
    }
    sum+=c-'0';    // c is the ASCII code of the digit, so you have to subtract an offset
    n++;
}
printf("Number of digits: %d", n);
printf("Sum of digits: %d", sum;