You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++求数字各位之和程序for循环输出错误while循环正常原因求解

问题原因分析
  • for循环终止条件逻辑错误
    你编写的for(int i = 0; i < n; i++)存在根本性逻辑缺陷:循环判断条件中使用的n会在循环体内被n = n / 10不断修改减小,而计数变量i是持续递增的,二者数值交叉时循环会提前终止,导致最高位的数字未被计入总和。
    举输入123的执行过程验证:

初始值:n=123,sum=0,i=0
第1次循环:i=0 < 123,取个位3 sum=3,n更新为12,i自增为1
第2次循环:i=1 < 12,取个位2 sum=5,n更新为1,i自增为2
第3次判断:i=2 < 1 不成立,循环直接终止,最高位的1未被累加,最终输出5,与你的错误结果完全吻合。
你提到的输入0235输出8的问题同理:int类型读取输入时会自动忽略前导0,实际读到的n是235,循环执行两次后i=2,n=2,判断2 < 2不成立终止,最高位的2未被累加,得到错误结果8。

  • while循环正确的原因
    while(n>0)的判断逻辑只校验当前是否还有未处理的数位,不需要依赖计数变量,只要n不为0就会继续执行循环处理剩余数位,自然可以累加所有位的数字得到正确结果。
修复方案

如果需要保留for循环写法,不需要额外引入计数变量i,直接把循环条件调整为和while逻辑一致即可,正确代码如下:

#include <iostream>
using namespace std;

int main()
{
    int n, m, sum = 0;
    cin >> n;             
    for(; n > 0; n = n / 10)
    {
        m = n % 10;     
        sum += m;      
    }
    cout << sum;
    return 0;
}

如果需要保留输入的前导0参与求和,不能用int类型存储输入,需要改为字符串类型读取后逐位转换为数字累加,int类型会自动丢弃数值前的所有前导0。

内容的提问来源于stack exchange,提问作者Swaraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 05:54:01