一个 32 位的有符号整数,将这个整数中的数字进行反转。
java中最大整数值是Integer.MAX_VALUE = 2^31-1 = 2147483647
同理最小整数值是Interger.MIN_VALUE = -2^31 = 22147483648
(此处个位数加粗后面需要用到)
题目:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0
public int reverse(int x) {
if(x==0) {
return 0;
}
int rev=0;
int temp=0;
while(x!=0) {
temp=x%10;
x=x/10;
if(rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE/10 && temp < -8)){
return 0;
}
if(rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE/10 && temp > 7)){
return 0;
}
rev=rev*10+temp;
}
return rev;
}
在这里,因为rev=rev10+temp,因此在这句话前面判断是否大于Interger.MAX_VALUE时都要除以10,如果大于Integer.MAX_VALUE/10,那么在下面rev=rev10+temp时一定会溢出
小于同理
当然不能遗弃等于的情况,当等于Integer.MAX_VALUE/10,就要比较个位数temp和7
小于同理

被折叠的 条评论
为什么被折叠?



