给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。
提供了两种解析思路:
分别是两种方法的执行结果和分析,
public class DayTwo_IntegerInversion {
public static void main(String[] args) {
reverse(-214748368);
reverse(-2147483648);
System.out.println(reverse(-2147483648));
// System.out.println(Math.pow(2,31));
}
public static int reverse1(int x){
int res = 0;
while(x!=0) {
//每次取末尾数字
int tmp = x%10;
//判断是否 大于 最大32位整数
if (res>214748364 || (res==214748364 && tmp>7)) {
return 0;
}
//判断是否 小于 最小32位整数
if (res<-214748364 || (res==-214748364 && tmp<-8)) {
return 0;
}
res = res*10 + tmp;
x /= 10;
}
return res;
}
public static int reverse(int x) {
int result = 0;
int Multiplier = 10;
StringBuilder sb = new StringBuilder();
if (x < 0) {
x *= -1;
sb.append("-");
}
if (x==-2147483648){
return 0;
}
if (x >= 10) {
while (true) {
if (x / Multiplier >= 1) {
result = x % Multiplier;
x /= 10;
sb.append(result);
} else {
sb.append(x);
break;
}
}
} else {
return x;
}
Double aDouble = Double.valueOf(sb.toString());
if (aDouble>2147483647||aDouble<-2147483648){
return 0;
}else{
return aDouble.intValue();
}
}
}