C语言实现输入数字数位反复求和得到1-9单结果的方法
数位反复求和到单数字的C语言实现
现有代码的现存问题
- 变量作用域不合法:在while循环内部定义的数位临时变量
d,会在单次循环结束后被销毁,循环退出后完全无法访问该变量,后续打印语句会触发编译报错 - 核心逻辑缺失:当前循环仅完成了逐位取余、逐位截断原数的动作,既没有对拆分出的数位做累加,也没有对累加得到的和重复执行数位拆分求和的流程
- 输出语句格式错误:
printf("Your number ", d)没有在格式串中设置对应数值的占位符,即使变量可访问,也无法把计算结果正常打印
可运行实现代码
按照需求的执行流程(先算所有数位和,再对和重复数位求和直到得到1-9的单个数字)编写的可运行代码如下:
#include <stdio.h> int main(){ int input; scanf("%d", &input); // 当数值大于等于10时,还不是目标单数字,需要重复执行求和流程 while (input >= 10) { int digit_sum = 0; // 逐位计算当前数值的所有数位之和 while (input > 0) { digit_sum += input % 10; input = input / 10; } // 将本轮计算得到的数位和作为下一轮的判断对象 input = digit_sum; } printf("最终输出:%d\n", input); return 0; }
效果验证
以测试用例输入12345为例,代码执行流程完全匹配预期:
- 第一轮数位求和:拆分出1、2、3、4、5,累加得到15
- 15大于等于10,进入第二轮求和:拆分出1、5,累加得到6
- 6属于1-9范围的单数字,循环终止,最终输出6
内容的提问来源于stack exchange,提问作者Foss
相关产品推荐
相关产品推荐

