如何实现为整数的每个奇数数字后添加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
相关产品推荐
相关产品推荐

