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

如何实现为整数的每个奇数数字后添加0的递归方法?

嘿,我来帮你搞定这个递归方法!你已经找对了判断奇数的方向(用位运算number&1确实很巧妙),不过递归的核心逻辑还没补全,咱们一步步来完善它。

首先得明确递归的核心思路:把大问题拆成小问题——每次只处理数字的最后一位,剩下的部分交给递归自己解决。比如处理123时,先搞定最后一位3(奇数,要变成30),再把前面12处理后的结果和它拼接起来就好。

接下来补全你的代码,我把完整的实现写出来,每一步都加了注释:

import java.util.Scanner;

public class OddDigitZeroAdder {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Digit a positive int number: ");
        int n = in.nextInt();
        System.out.println("Result: " + addingZeroToOddDigit(n));
        in.close();
    }

    public static int addingZeroToOddDigit(int number) {
        // 递归终止条件:数字处理完了,返回0
        if (number == 0) {
            return 0;
        }
        
        // 取出当前数字的最后一位
        int lastDigit = number % 10;
        // 递归处理去掉最后一位后的剩余数字
        int processedRemaining = addingZeroToOddDigit(number / 10);
        
        if ((lastDigit & 1) == 1) {
            // 如果是奇数:当前位要变成「数字+0」(比如3→30),前面的结果需要×100来腾出两位的位置
            return processedRemaining * 100 + lastDigit * 10;
        } else {
            // 如果是偶数:当前位直接保留,前面的结果×10腾出一位的位置
            return processedRemaining * 10 + lastDigit;
        }
    }
}

咱们来测试几个例子验证一下:

  • 输入123,输出10230(1→10,2保留,3→30,拼接起来就是10 2 30 → 10230)
  • 输入456,输出4506(4保留,5→50,6保留,拼接成4 50 6 →4506)
  • 输入7,输出70;输入8,输出8,完全符合预期。

另外我补全了主方法的逻辑,加上了结果输出和关闭Scanner的步骤,这样整个程序就能直接运行啦。

内容的提问来源于stack exchange,提问作者Petar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:23:23