题目: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 是因为 7
是2^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 }