给定一个范围为 32 位 int 的整数,将其颠倒。
例 1:
输入: 123
输出: 321
例 2:
输入: -123
输出: -321
例 3:
输入: 120
输出: 21
注意:!!!
假设我们的环境只能处理 32 位 int 范围内的整数。根据这个假设,如果颠倒后的结果超过这个范围,则返回 0。
思路:
循环将个位十位。。。取出,然后乘以循环乘以10;难点在于判断颠倒之后是否超出INT32的最大最小值。
#define MAX -((1<<(sizeof(int)*8-1))+1)
#define MIN 1<<(sizeof ( int ) * 8 - 1)
int reverse(int x) {
int ret=0;
while(x/10)
{
ret *=10;
ret += x%10;
x /=10;
}
if(x)
{
if(ret!=0 && MAX/abs(ret)<10)
{
return 0;
}
ret *=10;
ret += x%10;
}
return ret;
}