
本文介绍如何安全、准确地反转一个正整数,并自然跳过结果中的前导零(如输入12340,输出4321),避免整型溢出风险,同时提供可直接运行的java实现与关键注意事项。
本文介绍如何安全、准确地反转一个正整数,并自然跳过结果中的前导零(如输入12340,输出4321),避免整型溢出风险,同时提供可直接运行的java实现与关键注意事项。
要实现“反转整数并排除前导零”,核心思路不是边遍历边控制打印开关(如原代码中 enable_print 的复杂逻辑),而是先数学重构逆序值,再一次性输出——这样既逻辑清晰,又天然规避了前导零问题:因为数值本身不存储前导零,4321 作为整数打印出来就是 4321,而非 "004321"。
以下是推荐的实现方式(兼容正整数,含防溢出设计):
public class Solution {
public void solution(int N) {
if (N == 0) {
System.out.println(0);
return;
}
long reversed = 0;
int n = N;
while (n > 0) {
reversed = reversed * 10 + n % 10;
n /= 10;
}
// 验证是否溢出(可选但强烈建议)
if (reversed > Integer.MAX_VALUE) {
System.err.println("Warning: Reversed number exceeds int range.");
}
System.out.println(reversed); // 自动无前导零
}
}
✅ 示例运行:
- 输入
N = 12340→ 输出4321 - 输入
N = 1000→ 输出1 - 输入
N = 7→ 输出7
⚠️ 关键注意事项:
-
必须使用
long存储反转结果:例如Integer.MAX_VALUE = 2147483647,其反转值7463847412远超int范围(约21亿),若用int将触发静默溢出,得到错误负值(如-1126087180)。 -
无需特殊处理前导零:数学反转过程天然忽略末尾零(因
n % 10为0时,该0成为高位,但在累加中被后续非零位覆盖;最终数值型结果本身不含前导零)。 -
边界情况需单独考虑:
N = 0时循环不执行,应显式输出0。 - 若需支持负数,应在反转前保存符号,对绝对值操作,最后补回负号(本题限定为正整数,故未展开)。
综上,重构数值法比状态标记打印法更健壮、简洁且符合直觉,是工业级代码的首选方案。










