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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:11:55