题目:

练习:
运行结果:

一、读题
1、输入是 int 整数,范围:-2147483648, 2147483647
2、把数字倒过来,符号不动
3、末尾的 0 反转后不要
4、反转后的数字如果超出 int 范围 → 返回 0
5、不能用 long long,不能借助 64 位大数存结果,必须提前预判溢出
二、思路
不断取出 x 最后一位digit = x%10,x=x/10砍掉最后一位,res = res*10 + digit
(提前防溢出,不能等乘完再判断,int 溢出会乱。)
例子:
res 初始 = 0
1、x=123,digit=123%10=3;x=123/10=12
检查溢出,没问题。res = 0*10 +3 = 3
2、x=12,digit=2;x=1
检查溢出,没问题。res =3*10+2=32
3、x=1,digit=1;x=0
检查溢出,没问题。res=32*10+1=321
x=0,循环结束,返回 321
三、溢出预判
int 最大值 INT_MAX = 2147483647,INT_MAX /10 = 214748364
如果 res > 214748364:res*10 直接爆上限,溢出
如果 res == 214748364,并且取出的个位digit>7,res*10+digit>2147483647溢出
int 最小值 INT_MIN = -2147483648,INT_MIN /10 = -214748364
如果 res < -214748364:res*10 直接爆下限,溢出
如果 res == -214748364,并且digit < -8,就溢出