不使用库反转数字问题:末尾带0的数字反转结果不符预期
解决数字反转时保留前导零的问题
嘿,这个问题的核心原因很简单:整数类型(int)本身不会保留前导零。当你把00001作为整数存储时,它会自动被简化成1,所以你的原代码没办法输出带前导零的结果。要解决这个问题,我们可以换两种思路来实现:
方法一:直接用字符串反转(推荐,更简洁)
字符串可以完整保留每一个字符,包括末尾的零,反转后这些零就变成前导零,直接输出就能得到你想要的格式。修改后的代码如下:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); for (int i = 0; i < 4; i++) { // 直接读取字符串,而不是整数 String numberStr = input.next(); // 使用StringBuilder的reverse方法快速反转字符串 StringBuilder reversedStr = new StringBuilder(numberStr).reverse(); System.out.println(reversedStr); } } }
比如输入10000,这段代码会直接反转字符串得到00001并输出,完美保留所有前导零。
方法二:整数反转后补零(适合坚持用整数处理的场景)
如果你还是想通过整数运算来反转,那需要先统计原始数字末尾的零的个数,反转完非零部分后,再把这些零追加回去:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); for (int i = 0; i < 4; i++) { int number = input.nextInt(); int originalNumber = number; int zeroCount = 0; // 第一步:统计原始数字末尾的零的数量 while (originalNumber != 0 && originalNumber % 10 == 0) { zeroCount++; originalNumber /= 10; } // 第二步:反转去掉末尾零后的数字 int reverse = 0; int temp = originalNumber; while (temp != 0) { reverse = reverse * 10 + temp % 10; temp /= 10; } // 第三步:把统计到的零追加到反转结果后面 StringBuilder result = new StringBuilder(String.valueOf(reverse)); for (int j = 0; j < zeroCount; j++) { result.append("0"); } System.out.println(result); } } }
这个方法的逻辑是:先把原始数字末尾的零“记下来”,反转剩下的非零部分后,再把这些零补回去,这样就能得到00001这样的结果。
两种方法里,字符串反转的方式代码更简洁,也不容易出错,更推荐你使用哦。
内容的提问来源于stack exchange,提问作者Zuher Abud
相关产品推荐
相关产品推荐

