整数反转
通过不断地执行 remainder=x%10; x /=10; sum = sum*10+remainder; 来实现整数低位弹出,并不断向高位移动;
需要注意的点:
1,判断是否溢出(溢出前进行检查)
int类型的范围 [-2,147,483,648,2,147,483,647]
对正数,当前一次的sum满足sum > Integer.MAX_VALUE/10 (sum>214748364)或者 sum == Integer.MAX_VALUE/10 并且
rremainder>7 (sum=214748364,余数大于7)时,下一次的运算必产生溢出;
对负数同理;
if(sum > Integer.MAX_VALUE/10||((sum == Integer.MAX_VALUE/10)&&sum > Integer.MAX_VALUE/10&&remainder>7))
return 0;
if(sum < Integer.MIN_VALUE/10||((sum == Integer.MIN_VALUE/10)&&sum < Integer.MIN_VALUE/10&&remainder<-8))
return 0;
2,对int类型最小负整数特殊处理 : Integer.MIN_VALUE = -2^31 =-2,147,483,648
class Solution {
public int reverse(int x) {
int sum = 0,remainder = 0;
if(x==Integer.MIN_VALUE)//对Integer.MIN_VALUE的处理
return 0;
int tmpX = Math.abs(x);
while((tmpX/10)>0||tmpX%10>0)
{
remainder = tmpX%10;
tmpX = tmpX/10;
//溢出前检查
if(sum > Integer.MAX_VALUE/10||((sum == Integer.MAX_VALUE/10)&&sum > Integer.MAX_VALUE/10&&remainder>7))
return 0;
if(sum < Integer.MIN_VALUE/10||((sum == Integer.MIN_VALUE/10)&&sum < Integer.MIN_VALUE/10&&remainder<-8))
return 0;
sum = sum*10 +remainder;
}
return (x>=0)? sum:(-sum);
}
}