题目描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
方法一:
用long存储反转后的数,如果溢出则直接返回0即可
public int ReverseInt1(int x) {
public int reverse(int x) {
long temp = 0;
while(x != 0){
int pop = x % 10;
temp = temp * 10 + pop;
if(temp > Integer.MAX_VALUE || temp < Integer.MIN_VALUE){
return 0;
}
x /= 10;
}
return (int)temp;
}
}
方法二:
每次需要判断是否溢出,7是Integer.MAX_VALUE % 10,-8是Integer.MIN_VALUE % 10
public int ReverseInt3(int x) {
public int reverse(int x) {
int ans = 0;
while (x != 0) {
int pop = x % 10;
if (ans > Integer.MAX_VALUE / 10 || (ans == Integer.MAX_VALUE / 10 && pop > 7))
return 0;
if (ans < Integer.MIN_VALUE / 10 || (ans == Integer.MIN_VALUE / 10 && pop < -8))
return 0;
ans = ans * 10 + pop;
x /= 10;
}
return ans;
}
}
方法三:
利用字符串反转
public int ReverseInt4(int x) {
public int reverse(int x) {
StringBuilder str = new StringBuilder("");
if(x < 0){
str.append("-");
}
try{
return Integer.parseInt(str.toString()+new StringBuilder(String.valueOf(Math.abs( x))).reverse().toString());
}catch(Exception e){
return 0;
}
}
方法四:优化
public int reverse(int x) {
int ans = 0;
while (x != 0) {
if ((ans * 10) / 10 != ans) {
ans = 0;
break;
}
ans = ans * 10 + x % 10;
x = x / 10;
}
return ans;
}