题目链接点击打开链接
这个题加了可能溢出的情况之后真的复杂。不过我属于用作弊的方法把这个题目做出来了。
public class Solution {
public int reverse (int x)
{
long xx=x;
if(xx==0)
{
return (int)xx;
}
boolean neg=false;
if(xx<0)
{
neg=true;
xx=-xx;
}
int length=(int)Math.log10(xx)+1;
long numbers[]=new long[length];
for(int i=length-1;i>=0;i--)
{
numbers[i]=xx%10;
xx/=10;
}
long result=0L;
int power=1;
for(int i=0;i<length;i++)
{
result+=numbers[i]*power;
power*=10;
}
if(result>Integer.MAX_VALUE)
{
return 0;
}
if(neg)
{
return -(int)result;
}
else
{
return (int)result;
}
}
}
下面是判断相加溢出的方法
(1)无符号整数相加
int uadd_ok(unsigned x, unsigned y)
{
unsigned z = x + y;
if(z < x)
return 0;
return 1;
}
(2) 有符号整数相加,这个要复杂一些
int add_ok(int x, int y)
{
int z = x + y;
if(x > 0 && y > 0 && z < 0)
return 0;
if(x < 0 && y < 0 && z > 0)
return 0;
return 1;
}