😋|LeetCode007|反转数字
Table of Contents
难度:Easy😋
题目 #
给你一个 32 位的有符号整数 x
,返回将 x
中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1]
,就返回 0。
思路 #
- 如何在不用字符串的情况下反转数字?
- sum初始化为0,每次都“十进制左移“,即*10;然后补充空出来的那个个位数。
- 如何获取个位数?即每次依次从右向左(即从低位到高位地)取输入数字的每一位。
- 还需要注意,题目要求如果int溢出了就输出0.
- 如果溢出,lc平台会RE。
- 判断溢出可以根据符号判断。但是直接就RE了,来不及判断符号。这怎么办?——可以用long long接住他,然后与INT_MAX(2^31-1),INT_MIN(-2^32)比较即可。
代码实现 #
class Solution {
public:
int reverse(long long x) {
if(x<INT_MIN||x>INT_MAX)return 0;
int sign=1;
if(x<0){
sign=-1;
x=-x;
}
long long sum=0;
while(x>0){
//cout<<x%10<<' '<<sum<<endl;
sum=sum*10+x%10;
x/=10;
}
sum*=sign;
if(sum>INT_MAX||sum<INT_MIN)return 0;
return sum;
}
};