这道题的关键是如何处理overflow,其他的都很简单。
因为是32-bit signed integer ,所以要考虑到正负的情况,abs()。
接下来就是纯算数了。
最后只需判断绝对值是否大于integer的max就可以了。
注意保存结果的ans要设为long范围应该比int的范围大就好。因为需要判断。
代码如下:
class Solution {
public int reverse(int x) {
/*算数的长度*/
int tempx = x;
if( tempx < 0)
tempx = 0-tempx;
int length = 0;
while( tempx != 0){
length++;
tempx /= 10;
}
/*把值按位逆序存到数组里,然后在正序输出*/
int []a = new int [length];
tempx = x;
int count = 0;
long ans = 0;
while( tempx != 0){
a[count] = (int) (tempx%10);
count++;
tempx /= 10;
}
for( int i = 0; i < a.length; i++){
ans *= 10;
ans += a[i];
}
if(Math.abs(ans) > Integer.MAX_VALUE)
return 0;
return (int)ans;
}
}