整数反转,原题描述见官网
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
#include <stdio.h>
#include <limits.h>
int reverseInt(int x) {
if (x > INT_MAX || x < INT_MIN)
return 0;
int res = 0;
while (x) {
res = res * 10 + x % 10;
x = x / 10;
}
return res;
}
int main() {
int num = -123456;
printf("%d\n", reverseInt(num));
return 0;
}
这里有两个注意点:
- 不要溢出了,所以用到了 INT_MAX 和 INT_MIN
- 在 while 循环里,一开始用 res 存储中介值,也就是余数,最后返回 res 就是转换后的值
- 第一次循环时 res = -0*10 + 6 = -6
- 第二次循环时 res = -6*10 + 5 = -65
- 第三次循环时 res = -65*10 + 4 = -654
- 第四次循环时 res = -654*10 + 3 = -6543
- 第五次循环时 res = -6543*10 + 2 = -65432
- 第六次循环时 res = -65432*10 + 1 = -654321