LeetCode 7 . 整数反转(判断整数溢出int范围)

题目描述

给出一个整数,将其反转,但是要注意反转之后的整数大小一定要符合int范围内,如果溢出就返回0
题目链接
思路:我们可以类似于栈的方式一样用数学方法来解决这个问题,但是在转化过程中要判断是否整数溢出的情况,这里用rev来接收每次得到整数的最后一位pop,即rev = rev*10 + pop,然后用rev的值去判断是否存在整数溢出
INT_MAX = 2^31-1 = 2147483647
INT_MIN = -2^31=-2147483648
当rev > INT_MAX/10,那么这个反转整数必然溢出
同理rev < INT_MIN/10,那么这个反转整数也溢出
如果rev = INT_MAX/10 或 INT_MIN/10,那么我们只需要比较最后一位。正数:pop > 7就溢出;负数:pop < -8就溢出
代码如下

int reverse(int x) {
    int rev = 0;
    while(x != 0)
    {
        int pop = x % 10;
        x /= 10;
        if(rev > INT_MAX/10 || (rev == INT_MAX/10 && pop > 7))
            return 0;
        if(rev < INT_MIN/10 || (rev == INT_MIN/10 && pop < -8))
            return 0;
        rev = rev * 10 + pop;
    }
    return rev;
}

你可能感兴趣的:(LeetCode)