问题:
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
问题说明
问题的难度适中,主要考虑数学思维,已经计算机中对于边界的处理技巧。这里有个非常有趣的问题,对于溢出的数据,需要返回0。但是在计算机中,是不能真正让数据溢出的现象出现的。
因此如何在数据溢出前判定其会溢出的可能,是该问题的核心难点。
代码
package _01_50;
public class _07ReverseInteger{
public int reverse(int x){
int out = 0;
while(true){;
if(out < (Integer.MIN_VALUE/10)) return 0;
if(out> (Integer.MAX_VALUE/10))return 0;
if(x<0){
if((Integer.MIN_VALUE - x%10)>out*10) return 0;
}
if(x>0){
if((Integer.MAX_VALUE - x%10)<out*10) return 0;
}
//out*10 + x%10 compare with max_value
out = out*10 + x%10;
x = x/10;
if(x==0) break;
}
return out;
}
public static void main(String[] arg){
_07ReverseInteger ReverseInteger = new _07ReverseInteger();
int a = 0;
int b = -1234;
int c = 45245245;
int d = 1341350;
int e = 12;
System.out.println(ReverseInteger.reverse(a));
System.out.println(ReverseInteger.reverse(b));
System.out.println(ReverseInteger.reverse(c));
System.out.println(ReverseInteger.reverse(d));
System.out.println(ReverseInteger.reverse(e));
}
}
参考:
JAVA判断整数溢出