题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
解题思路
自己写的wrong代码
- 错误原因:没考虑反转以后可能会超出整数限,程序鲁棒性不够
class solution{
public:
int reverse(int x) {
int res = 0;
bool z = x>=0?true:false;
x = x>=0?x:x*-1;
while(x){
int temp=0;
temp = x%10;
x/=10;
res = res*10+temp;
}
return z==true?res:res*-1;
}
};
正确题解
注意点
- 考虑整数限INT_MAX 和INT_MIN
- 考虑-2147483648不能反转为正数,事实上,x不用处理为正数,负数照样可以取模
class Solution {
public:
int reverse(int x) {
if(x/10 == 0) return x; //平凡情况:若x∈[-9,9],则直接返回其本身
long y = 0;
while(x) {
y *= 10;
if(y > INT_MAX || y < INT_MIN)
return 0; //溢出
y += x % 10; //取出x的个位,作为目前的最高位
x /= 10; //去掉x的个位
}
return y;
}
};
/*
作者:initial_d-2
链接:https://leetcode-cn.com/problems/reverse-integer/solution/0ms_ji-jian-_chao-yue-100_yi-dong-_7zheng-shu-fan-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
*/