
本教程详解如何安全、准确地反转一个正整数,并自然消除结果中的前导零,同时避免整数溢出风险。
本教程详解如何安全、准确地反转一个正整数,并自然消除结果中的前导零,同时避免整数溢出风险。
在处理整数反转问题时,常见误区是仅关注逐位输出逻辑(如通过标志位控制打印时机),但这种方式易出错、可读性差,且无法真正“生成”反转后的数值。更健壮、通用的解法是重建反转数:从原数低位开始提取数字,逐步构造新数。该方法天然跳过前导零——因为反转后原末尾的零会成为新数的高位,而乘加过程不会将其纳入有效位。
以下是推荐实现:
public class Solution {
public long reverse(int n) {
if (n == 0) return 0;
long res = 0;
int num = Math.abs(n); // 处理负数时建议先取绝对值(本题限定为正整数,可省略)
while (num > 0) {
res = res * 10 + num % 10;
num /= 10;
}
return res;
}
}调用示例:
Solution sol = new Solution(); System.out.println(sol.reverse(12340)); // 输出:4321 System.out.println(sol.reverse(1000)); // 输出:1 System.out.println(sol.reverse(7)); // 输出:7
✅ 关键优势:
-
自动去前导零:
12340 → 4321,无需额外状态标记或条件判断; -
防溢出设计:使用
long存储结果,可容纳Integer.MAX_VALUE(2147483647)反转后的7463847412; -
逻辑清晰:每轮
res = res * 10 + digit模拟手工竖式反转,符合直觉。
⚠️ 注意事项:
- 若输入含负号(如
-123),需明确需求:是反转绝对值(321)还是保留符号(-321)。本解法中可通过return n 支持后者; - 输入为
0时需单独处理,否则循环不执行,返回0是正确行为; - 题目若要求返回
int类型,须增加溢出检查(如if (res > Integer.MAX_VALUE)抛异常或截断),但不推荐——因反转本身可能合法超出int范围,强制转int将导致静默错误(如7463847412 → -1126087180)。
总结:重建法是整数反转的标准范式,兼顾简洁性、健壮性与可扩展性,应作为首选方案。

















