7.整数反转

class Solution {
    public int reverse(int x) {
        int rev = 0; // 存储反转结果
        
        // 循环处理每一位数字(包含负数情况)
        while (x != 0) {
            /* 关键溢出检查:在计算结果前进行预判
               Integer.MAX_VALUE = 2147483647 → 214748364
               Integer.MIN_VALUE = -2147483648 → -214748364
               当 rev 的绝对值已经大于 MAX_VALUE/10 时:
               - 若rev为正数,下步乘10后必定超过2147483647(至少变成2147483650)
               - 若rev为负数,下步乘10后必定小于-2147483648(至少变成-2147483650)
            */
            if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {
                return 0; // 预判溢出立即返回
            }
            
            // 获取当前最后一位数字(Java中负数取模仍为负数)
            int digit = x % 10; // 示例:-123 % 10 = -3
            
            x /= 10;  // 移除已处理的最低位(自动处理正负)
            
            // 构建反转数字(注意负数处理)
            rev = rev * 10 + digit; // 关键计算步骤
            /* 示例流程(输入123):
               迭代1:rev=0*10+3=3
               迭代2:rev=3*10+2=32
               迭代3:rev=32*10+1=321
            */
        }
        
        return rev; // 返回处理后的结果
    }
}                       
posted @ 2025-05-19 16:12  星星永远发着光  阅读(24)  评论(0)    收藏  举报