Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
溢出不意味着ans_before<ans,溢出以后可能还是大于上次的数。
解法一:采用x=reverse(reverse(x)) 的技巧判断是否溢出:
public class Solution {//采用了reverse的reverse是数字本身的思想来防止溢出。特殊:0,10
public int reverse(int x) {
if(x==0)
{
return 0;
}
int temp=Math.abs(x);
while(temp%10==0)
{
temp/=10;
}
if(temp!=reverse_num(reverse_num(temp)))
{
return 0;
}
if(x<0)
{
return -reverse_num(temp);
}
else return reverse_num(temp);
}
public int reverse_num(int x)
{
int ans=0;
int temp=x;
//boolean overflow=false;//溢出判定
while(temp!=0)
{
ans=ans*10+(temp%10);
temp/=10;
}
return ans;
}
}
解法二:利用ans 和 Integer.MAX_VALUE/10 比较发现溢出。
public class Solution {//采用了ans和MAX_VALUE/10进行比较发现溢出。
public int reverse(int x) {
int ans=0;
int temp=x;
while(temp!=0)
{
if(Math.abs(ans)>(Integer.MAX_VALUE/10))
{
return 0;
}
ans=ans*10+(temp%10);
temp/=10;
}
return ans;
}
}
1. 负数和正数不用区别对待。
2. -ans表示ans的负数。