题目:https://leetcode-cn.com/problems/reverse-integer/

题意:输入一个整数,输出它的反转数。

如321---->123

----------------

直接用数学方法转换。

tmp = x%10;

ans = ans *10 + tmp;

每一步计算新值时判断ans是否溢出。

x是正数时,溢出条件:

1、ans> INTMAX / 10 ;

2、 ans== INTMAX / 10 && tmp > 7(这个7 是因为 72^31 - 1的个位数,题目给出的就是一个32位有符号整数)。

x是负数时,溢出条件:

1、ans < INTMIN / 10;

2、 ans == INTMIN / 10 && tmp < -8(这个-8 是因为 -8是- 2^31的个位数)。

代码:

Java

 1 class Solution {
 2     public int reverse(int x) {
 3         int ans = 0;
 4         while(x != 0 ) {
 5             int t = x % 10;
 6             x /= 10;        
 7             if( ans > Integer.MAX_VALUE / 10 || (ans == Integer.MAX_VALUE / 10 && t > 7))
 8                 return 0 ;
 9             if( ans < Integer.MIN_VALUE / 10 || (ans == Integer.MAX_VALUE / 10 && t < -8) )
10                 return 0;
11              ans = ans*10 + t;
12         }
13         return ans;
14     }
15 }