反转整数
给出一个 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;
}
}