1.题目描述
给你一个 32 位的有符号整数 x
,返回将 x
中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1]
,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
2.样例描述
3.思路描述
1、将12345 % 10 得到5,之后将12345 / 10
2、将1234 % 10 得到4,再将1234 / 10
3、将123 % 10 得到3,再将123 / 10
4、将12 % 10 得到2,再将12 / 10
5、将1 % 10 得到1,再将1 / 10
无论正数还是负数,按照上面不断的/10
这样的操作,最后都会变成0
,所以判断终止条件就是!=0。假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。也就是说我们不能用long存储最终结果,而且有些数字可能是合法范围内的数字,但是反转过来就超过范围了。
如果某个数字小于 -214748364
说明溢出了
如果某个数字等于 -214748364
,还需要跟最小数的末尾比较,即看它是否小于8
4.代码展示
#include <stdlib.h>
int reverse(int x){
int res=0;
while(x!=0)
{
int tmp=x%10;
if (res>214748364 || (res==214748364 && tmp>7)) {
return 0;
}
//判断是否 小于 最小32位整数
if (res<-214748364 || (res==-214748364 && tmp<-8)) {
return 0;
}
res=res*10+tmp;
x=x/10;
}
return res;
}