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

LeetCode 7. Reverse Integer 关于溢出很好的理解和处理

时间:2015-01-30 20:54:36      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

上界2147483647, 下界-2147483648. 反过来看7463847412 ->  2147483647,  -8463847412 -> -2147483648

为使反转不越界,那么绝对值大于10^9的参数x的前9位应满足<=463847412. 我们没有考虑最高位,是因为最高位一定<=2, 从而<=7或8

所以反转前先检查是否将溢出,溢出时返回-1; 反之开始反转。

 

代码:

class Solution   
{  
public:  
    int reverse(int x)   
    {  
        if( overflow(x) == true)  
        {  
            return -1;  
        }  
  
        int ret = 0;  
          
        while (x!=0)  
        {  
            ret = 10*ret + x%10;  
            x /= 10;  
        }  
  
        return ret;  
    }  
private:  
    bool overflow(int x)  
    {  
        if (x / 1000000000 == 0) // x的绝对值小于1000000000, 不越界  
        {  
            return false;  
        } else if (x == INT_MIN) // INT_MIN反转后越界,也没法按下述方法取绝对值(需要特判),直接返回true  
        {  
            return true;  
        }   
        x = abs(x);  
        // x = d463847412 ->  2147483647. (参数x,本身没有越界,所以d肯定是1或2)  
        // or -d463847412 -> -2147483648.   
        for (int cmp = 463847412; cmp != 0; cmp/=10, x/=10)  
        {  
            if ( x%10 > cmp%10 )  
            {  
                return true;  
            } else if (x%10 < cmp%10)  
            {  
                return false;  
            }  
        }  
          
        return false;  
    }  
};  

 

 

LeetCode 7. Reverse Integer 关于溢出很好的理解和处理

标签:

原文地址:http://www.cnblogs.com/zzfsblog/p/4263149.html

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