在C中编程以对整数中的每个数字求和

时间:2015-01-30 20:39:34

标签: c algorithm

int main(){
    int x;
    int sum;

    printf("Enter a positive integer: ");
    scanf("%d", &x);

    do{

        sum += (x%10);
        x=(x/10);

        if((x/10)==0){
            sum += x;
        }
    }
    while((x/10)!=0);

    printf("%d",sum);
}

嘿,我试图让这个在输入的整数中加上每个数字,但是我使用的代码会一直输出错误的输出。有人请帮我修改我的等式/代码,因为我不确定为什么输出不正确。

4 个答案:

答案 0 :(得分:6)

代码

int sum;

未初始化。使用像

这样的东西
int sum = 0;

注意:局部变量不会自动初始化[0或其他任何东西],如果没有显式初始化,它们的内容将是垃圾。因此,使用sum += (x%10);将导致读取前写场景,从而产生错误的结果。

答案 1 :(得分:4)

这是一个小数学问题:

  有人给了你十个苹果,然后别人给了你两个苹果。你有几个苹果?

正确的答案是这个问题无法回答,因为没有人告诉你一开始就有多少苹果。

您的程序遇到了同样的问题:在开始添加sum之前未能初始化int sum = 0; ,因此它有初始"垃圾"值。

将声明更改为

{{1}}

将解决问题。

答案 2 :(得分:0)

初始化变量sum -

int sum = 0;

如果您未使用C和其他语言初始化变量,则首次在表达式中使用时,会为其分配垃圾/随机值。

答案 3 :(得分:0)

迟到的答案

由于您已经发现代码存在问题,我想提供一个更简洁的替代方案:

int x;
int sum = 0
int digit;

printf("Enter a positive integer: ");
scanf("%d", &x);

while (x > 0) {
    digit = x % 10;
    sum += digit;
    x /= 10;
}
printf("%d", sum);

x % 10提取数字的最后一位,然后x /= 10通过删除最后一位数来截断整数。