Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
重点:做overflows的判断。
尝试了用long来做判断,但是在tmp*10的时候就已经出错了,所以先对这个进行判断,再对总结果判断。
int reverse(int x) {
int ret = 0;
//int a = (1<<30-1)*2-1; long>int
//long a = (1 << 31) - 1;
int mod;
int tmp = ret;
if (x > 0) {
while (x > 0) {
mod = x % 10;
tmp = ret;
ret = tmp * 10 + mod;
x = x / 10;
if (tmp != (ret - mod) / 10)
return 0;
}
if (ret < 0)
return 0;
else
return ret;
}
else {
x = -x;
while (x > 0) {
mod = x % 10;
tmp = ret;
ret = tmp * 10 + mod;
x = x / 10;
if (tmp != (ret - mod) / 10)
return 0;
}
ret = -ret;
if (ret > 0)
return 0;
else
return ret;
}
}