C语言递归实现:数字每位加1(9转为0)的功能优化求助
解决数字每一位加1且9转0的递归实现问题
嘿,你的递归思路方向是对的!现在只需要一个小技巧就能解决9的转换问题,而且完全不用显式判断某一位是不是9——利用模10运算就可以完美实现需求。
问题分析
你当前的代码里,当某一位是9时,dig +=1会得到10,直接加到结果里就会导致错误(比如输入9返回10,输入19返回30)。而我们需要的是9加1后变成0,其他数字加1保持不变,这个逻辑刚好可以用(dig + 1) % 10来实现:
- 0-8加1后模10,结果就是自身加1(比如3→4,8→9)
- 9加1等于10,模10后结果为0,正好符合要求
修改后的代码
把你代码里的dig +=1替换成dig = (dig + 1) % 10,同时调整递归终止条件的返回值,完整代码如下:
int new_num(int num){ int dig = num % 10; num = num / 10; if (num == 0){ return (dig + 1) % 10; // 终止条件也要用模10处理9的情况 } int res = new_num(num); dig = (dig + 1) % 10; // 替换原来的dig +=1 res *= 10; res += dig; return res; }
测试验证
我们来验证几个示例:
- 输入9 → 返回
(9+1)%10=0,正确 - 输入19 → 递归处理1得到2,然后处理9得到0,2*10+0=20,正确
- 输入99 → 递归处理第一个9得到0,再处理第二个9得到0,0*10+0=0,正确
- 输入945 → 递归处理94得到5,处理5得到6,5*10+6=56,正确
- 输入345 → 每一位加1模10得到456,正确
这样就完全满足你的需求啦,而且全程没有显式判断数字是否为9~
内容的提问来源于stack exchange,提问作者user7335738
相关产品推荐
相关产品推荐

