码迷,mamicode.com
首页 > 其他好文 > 详细

7.整数反转--数论(怎么判断溢出)

时间:2019-07-07 21:33:34      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:==   mamicode   判断   ||   出现   flag   添加   解决   pre   

技术图片

class Solution {
   public int reverse(int x) {
        int flag = 1;
        int ans = 0;
        int temp = 0;
        if (x < 0) { // 解决正负 符号位加入运算 现在需要解决的是溢出
            flag = -1;
            x *= -1;
        }
        while (x > 0) {
            temp = x % 10;
            if (ans > Integer.MAX_VALUE / 10 || (ans == Integer.MAX_VALUE / 10 && temp > 7))
                return 0;
            if (ans < Integer.MIN_VALUE / 10 || (ans == Integer.MIN_VALUE / 10 && temp < -8))
                return 0;
            ans = ans * 10 + temp;
            x /= 10;
        }
        return ans * flag;
    }
}

int的取值范围为: -2^31——2^31-1,即-2147483648——2147483647

从ans 10 + pop > MAXVALUE这个溢出条件来看
当出现 ans > MAXVALUE / 10 且 还有pop需要添加 时,则一定溢出
当出现 ans == MAXVALUE / 10 且 pop > 7 时,则一定溢出,7是2^31 - 1的个位数
从ans 10 + pop < MINVALUE这个溢出条件来看
当出现 ans < MINVALUE / 10 且 还有pop需要添加 时,则一定溢出
当出现 ans == MAXVALUE / 10 且 pop < -8 时,则一定溢出,8是-2^31的个位数*

7.整数反转--数论(怎么判断溢出)

标签:==   mamicode   判断   ||   出现   flag   添加   解决   pre   

原文地址:https://www.cnblogs.com/cznczai/p/11147887.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!