这道题有意思的地方在于判断溢出,因为计算在不断进行,你需要提前判断是否会溢出,而且在c++中,对int最大值以及最小值进行了宏定义。
#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX-1)
我们需要在每次计算rec返回值判断以下,是否下次的计算会超出数值范围。
我们先把之前不用考虑数值超出的范围拷出来。
int reverse(int x)
{
int rec = 0;
while(x != 0)
{
int pop = x % 10;
rec = pop + rec * 10;
x/=10;
}
return rec;
}
有两种情况需要我们考虑:
第一种 计算值*10之后直接越界;
第二种 计算值*10加上取余值(pop)才会越界。
int reverse(int x)
{
int rec = 0;
while(x != 0)
{
int pop = x % 10;
if( (rec > INT_MAX /10) || (rec == INT_MAX /10 && pop > 7)) return 0;
if( (rec < INT_MIN /10) || (rec == INT_MIN /10 && pop < -8)) return 0;
rec = pop + rec * 10;
x/=10;
}
return rec;
}