首页 > 解决方案 > for 循环和模运算符

问题描述

编写一个程序,计算一个整数的各位数字之和。例如,数字 2155 的数字之和为 2 + 1 + 5 + 5 或 13。程序应接受用户输入的任意整数。

我可以使用 while 循环让它工作,但如果我用循环将它子for化,程序会计算除最后一个之外的所有数字。为什么是这样?

#include <stdio.h>

int main(void)
{
    int i, num, sum = 0, temp;

    printf("Enter the number:\n");
    scanf("%i", &num);

    printf("Test for num: %i\n", num); //both num & temp return same number
    temp = num;
    printf("Test for temp: %i\n", temp);

    //while (num > 0)
    for (i = 0; i <= temp; i++)  //replacing temp w/ num will skip last num
    {
        sum += num % 10;
        //sum += right;
        num /= 10;
    }

    printf("Given number = %i\n", temp);
    printf("Sum of digits of %i = %i", temp, sum);

    return (0);
}

标签: cfor-loopmodulo

解决方案


正如您已注释掉的那样,在 for 循环中使用 num ,您将 i 与原始数字的被除数相比,而不是 while num > 0

例如,如果您有 num = 158,则循环将执行,然后将 num 设置为 15。i 递增为 1。因此 i < num,因此它会再次执行。这次循环之后,num == 1 和 i == 2。因此它不会执行,并且 158 中的 1 不会被添加。

如果您的最高位大于或等于位数,则您在 for 循环中带有 num 的代码将起作用。否则,它不会。

您可以摆脱 i 并在 for 循环中简单地使用 num 。

for(;num > 0; num /= 10)
    sum += num%10;

推荐阅读