反转整数

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

分析:

1.我们可以用同string,但这不是本题的要求,我们用数学的方法,

re=re*10+pop,初始re=0

比如513,513/10=51,513%10=3,re=3

51/10=5,pop=51%10=1 re=3*10+1=31

5/10=0;pop=5%10=5,re=31*10+5=315

 

2.我们只能存储得下 32 位的有符号整数,这句话意味着我们不能用long来存储,-2的31次=-2 147 483 648,机器数是用补码表示,表示范围是 [−231,  231 − 1]。

-2 147 483 648-----2 147 483 647

3.判溢出,所以溢出出re=re*10+pop,*10这里,在比如我们2 147 483 647,2 147 483 6470一定溢出,翻过来也是溢出,

 

 


class Solution {
    public int reverse(int x) {
        int INT_MAX=2147483647;
        int INT_MIN=-2147483648;
        int pop;
        int rev=0;
        while (x != 0) {
            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;
    }
}
 

 

 

 

posted on 2020-02-26 16:03  纯正肉包  阅读(166)  评论(0编辑  收藏  举报