[LeetCode] 7_反转整数
题目要求
给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
题目分析
-在不借用外部空间的情况下,可以逐位进行计算,由于反转后得到的数可能会溢出,在每次循环中都要进行判断是否溢出。既需要判断x>0的情况,也要能判断x<0的情况。
注意点
- 溢出时的处理,int范围的上下界绝对值不同
- x的判断条件,是x!=0而不是x>0,后者适用于被反转数只可能是整数的情况
- 当x<0时,若n是大于0的正整数,那么x/n<0,x%n<0
代码
class Solution {
public:
int reverse(int x) {
int ans=0;
int max_int=2147483647,min_int=2147483648;
while(x!=0){
int pop=x%10;
x=x/10;
if(ans>max_int/10 || ans==max_int/10 && pop>7)return 0;
if(ans<min_int/10 || ans==max_int/10 && pop<-8)return 0;
ans=ans*10+pop;
}
return ans;
}
};