乖乖嘎吉乖 2024-02-15 15:12 采纳率: 83.3%
浏览 6
已结题

求整数的各位数相加C++

题目描述
Write a program which reads an integer and prints sum of its digits.
输入描述
The input consists of multiple datasets.
For each dataset, an integer x is given in a line. The number of digits in x does not exceed 20000.
The input ends with a line including single zero. Your program should not process for this terminal symbol.
输出描述
For each dataset; print the sum of digits in x.
样例输入
123
55
1000
0
样例输出
6
10
1

以下是我的代码,我想知道是哪里出现了问题没有输出结果

#include <iostream>
using namespace std;
int main()
{
    int n ,m, y = 0;
    while (cin >> n);
    {
        if (n == 0)
        {
            return 0;
        }
        else
        {
            m = n;
            while (m != 0)
            {
                m = m / 10;
                y = y + m % 10;
            }
            cout << y << endl;
        }
    }
    return 0;
}

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-02-15 15:13
    关注

    引自免费微信小程序:皆我百晓生

    您在代码中处理输入和计算各位数之和时存在一些逻辑错误。以下是修改后的正确版本:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int n, y = 0;
        
        // 更正:移除 while 循环中的分号,使循环体内的语句生效
        while (cin >> n)
        {
            if (n == 0)
            {
                break; // 当读取到 0 时跳出循环
            }
            else
            {
                // 更正:在计算 y 之前备份 m 的值,否则 m 在每次循环都会被更新
                int m = n;
                while (m != 0)
                {
                    // 更正:将 m 除以 10 放在计算余数之前
                    y += m % 10;
                    m /= 10;
                }
                cout << y << endl;
            }
        }
    
        return 0;
    }
    

    问题分析:

    1. 原始代码中的 while (cin >> n); 后面的分号导致循环体内的内容没有被执行,应去掉分号。
    2. 计算 y 时,需要先保存原始数值 nm 中,然后对 m 进行操作,而不是直接在 m 上进行除法和求余数运算。
    3. 当读取到输入为零时,应当跳出循环,而不是返回 0 结束程序(这里使用 break 跳出循环即可)。

    修正后的代码应该能够正常读取多组整数并输出各位数之和。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 2月23日
  • 已采纳回答 2月15日
  • 创建了问题 2月15日