给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
注意以下几个点:
1)符号位;
2)超int32;
3)判断0的情况;
int reverse(long long x) {
long long s = 0; // (1) 存储结果;
int sign = +1; // (2) 存储符号位;
if(x < 0) { // (3) 判断x的符号位;
sign = -1; // (4) 负数的情况;
x = -x; // (5) 取反;
}
if(x == 0) {
return 0; // (6) x 为 0 的情况直接返回;
}
while (x) {
s = s * 10 + (x % 10);
x /= 10;
}
s *= sign; // (7) 别忘了
if(s < -((long long)1<<31) ) {
s = 0;
}else if(s > ((long long)1<<31) - 1 ) {
s = 0;
}
return s;
}