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

C语言实现最大数位和函数始终返回0的问题求助

初始代码错误点
  • 第一个计算原数n数位和的循环直接修改了输入参数n的值,循环结束后n已经被置为0,后续第二个while(n>0)的循环完全不会执行,函数直接走到return逻辑
  • 局部变量maxi未初始化就被返回,C语言中未初始化的局部自动变量值是不确定的,你看到的返回0只是运行时的随机结果
  • 变量s2没有初始化,就算后续能进入循环,每次计算数位和前也没有重置为0,累加计算得到的数位和完全错误
  • 内层计算当前数数位和的循环又一次修改了外层循环的n变量,导致外层遍历逻辑直接被打断,无法遍历所有小于原输入值的整数
  • 判断逻辑错误:你需要找数位和更大、或数位和相等时数值更大的数,原代码的if(s1 > s2)反而会在当前数数位和更小时才更新maxi,和需求完全相反,且相等的场景没有做保留大数的处理
修复后代码说明

你拆分出独立digitSum函数的版本逻辑是正确的:

int digitSum(int n)
{
    int s=0;
    while(n>0)
    {
        s += n%10;
        n/=10;
    }
    return s;
}

int largestDigitSum(int n)
{
    int i, maxi=1;
    for(i=2;i<=n;i++)
        if(digitSum(i) >= digitSum(maxi))
            maxi=i;
    return maxi;
}

从小到大遍历所有数,只要当前数的数位和大于等于之前记录的最大值的数位和就更新maxi,刚好满足「数位和相等时返回更大数值」的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:24:02