https://leetcode-cn.com/problems/reverse-integer/description/
我的解决方案,因为直接相加会溢出,所以先减去最大值,正数与正数相减不会产生溢出
class Solution {
public static int reverse(int x) {
int[] num = new int[100];
int maxInt = (int)Math.pow(2, 31)-1;
int cnt= 0;
int res=0;
boolean positive = true;
if(x<0) {
positive = false;
x = 0-x;
}
while(x>0) {
num[cnt++] = x%10;
x/=10;
}
for(int i=0;i<cnt;i++) {
int temp = (int) Math.pow(10,cnt-1-i);
int tt = num[i];
if(cnt-1-i==9&&tt>2) return 0;
if(res - maxInt + num[i]*temp >0)
return 0;
res = res+num[i]*temp;
}
if(!positive)
res=0-res;
return res;
}
public static void main(String[] args) {
int x = 1534236469;
System.out.println(reverse(x));
}
}
官方给出的答案:
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
//最大值2147483647 最小值-2147483648
//因此我们要判断最后一位数是否 >7 或者 <-8
//这些判断都是在溢出之前做的
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
}