Java数字反转需求:末尾0反转后替换为1,仅用while循环求修改方案
数字反转功能修正方案
你的原代码存在两处关键问题,同时缺少需求对应的处理逻辑,以下是具体的修正和补充说明:
原代码问题
- 反转逻辑错误:
reversed = 0 * reversed + digit会导致每次循环仅保留当前提取的数字位,正确的数字反转公式应为reversed = reversed * 10 + digit,这样才能逐步构建反转后的数字。 - 未处理末尾0替换需求:原代码没有针对“输入数字末尾为0时,反转后对应位置替换为1”的逻辑。
需要添加/修改的代码内容
- 统计原数字末尾的0的数量:先通过一个while循环统计原数字末尾连续0的个数,准确识别需要替换的位置。
- 修正反转公式:替换错误的反转计算逻辑。
- 在反转循环中替换指定位置的0:当处理到原数字末尾的0时,将其替换为1,其他位置的0保持不变。
修正后的完整代码
import java.util.Scanner; public class ReverseNumber { public static void main(String[] args) { Scanner kbd = new Scanner(System.in); int reversed = 0; System.out.println("Enter your number"); int number = kbd.nextInt(); int originalNum = number; int trailingZeroCount = 0; // 统计原数字末尾连续0的数量 while (originalNum > 0 && originalNum % 10 == 0) { trailingZeroCount++; originalNum /= 10; } // 执行数字反转,同时处理末尾0替换为1的需求 while (number > 0) { int digit = number % 10; // 仅处理原数字末尾的0,替换为1 if (trailingZeroCount > 0) { digit = 1; trailingZeroCount--; } // 正确的反转计算逻辑 reversed = reversed * 10 + digit; number /= 10; } // 循环结束后输出最终结果(原代码循环内输出会打印中间过程,移至此处更合理) System.out.println("Reversed number: " + reversed); } }
测试示例
- 输入
120→ 输出121(原末尾0替换为1) - 输入
500→ 输出115(原末尾两个0都替换为1) - 输入
102→ 输出201(中间0不替换) - 输入
7→ 输出7(无0,正常反转)
内容的提问来源于stack exchange,提问作者kaze
相关产品推荐
相关产品推荐

