1.题目
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
2.示例
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:
-2^31 <= x <= 2^31 - 1
3.分析
用%依次得到每一位数。同时,为了满足旋转过来的数字不超过int类型的范围,我们可以使用pow(2,31)/10函数得到一个Int型数字。之所以要/10是因为Int类型的数字是无法保存[-2^31 , 2^31 - 1]之外的数字,因此缩小10倍再进行比较。具体操作,可以看下面的代码。
4.代码
int reverse(int x){
int result=0;//保存最后结果
int just=pow(2,31)/10;//限制范围的一个标志值
while(x!=0){//循环条件式x!=0,若x直接等于0则result=0;若x!=0就进行循环,直到x==0,这时result就已经是旋转后的数字了。
int temp= x%10;//得到每一位的值
if((result<(-1)*just)||(result>just))return 0;//保证result要在[-2^31,2^31-1]内,否则直接返回0
result=(result*10+temp);//每一轮循环都要进行一次运算,保证最后得到result是正确的
x/=10;//得到一个temp后,x就要缩小10倍
}
return result;//返回最终结果
}
5.总结
此题并不困难。若有难度,主要集中在如何保证旋转后的值在[-2^31,2^31-1]内,因为如果处理不好,就很容易使result超过int类型值的范围,而得到错误结果。