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
相关产品推荐
相关产品推荐

