C语言计算Iterated cross sum(迭代数位和)代码异常排查求助
迭代数位和代码修改方案
原代码核心问题
- 外层循环终止条件错误:
c>10会漏掉数值等于10的场景(10是两位数,仍需继续求和得到1),需改为c >= 10 - 单次数位和计算完成后,没有将求和结果赋值给n、也没有重置累加变量c,导致外层循环无法对上次的求和结果做二次计算
- 内层循环逻辑冗余:数位中遇到0不需要跳过,加0不影响求和结果,额外判断反而增加复杂度
- 内层循环条件错误,不需要额外判断
c>10,内层循环仅负责计算当前n的数位和即可
修改后的可运行代码
#include <stdio.h> int main() { int n = 0; printf("please give us your number: "); scanf("%d", &n); int current = n; // 存储当前待计算数位和的数值 int sum; // 外层循环:判断当前数值是否为一位数,不是就继续迭代求和 while (current >= 10) { sum = 0; // 内层循环:计算current的数位和 while (current != 0) { sum += current % 10; current = current / 10; } current = sum; // 将本次数位和赋值给current,供下一次迭代使用 } printf("%d", current); return 0; }
逻辑说明
- 外层循环持续判断当前待计算的数值是否大于等于10,只要是两位数及以上就继续迭代
- 每次进入外层循环先重置累加变量sum为0
- 内层循环遍历当前数值的每一位,累加得到数位和
- 将内层循环算出的数位和赋值给current,进入下一轮外层循环判断,直到current为一位数为止
内容的提问来源于stack exchange,提问作者Rico1990
相关产品推荐
相关产品推荐

