[
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
]
这道题有几个细节要注意。
1. 有符号整数,要考虑负数如何处理。我们可以用abs取绝对值,先不考虑负数,后面反转后再把负号加上,abs其实不是一个好办法,因为 long long 类型会出问题,不过本题说了数值范围32位有符号数,abs可以用。
2.溢出判断。可以先用宏定义直接把MAX 和 MIN给出。
接着就是求余求模的处理了。
#define MAX 2147483647
#define MIN -2147483648
int reverse(int x){
int output = 0;
int t = 0;
int tempX;
if(x < -2147483642) return 0;
tempX = abs(x);
while(tempX != 0) {
t = tempX % 10;
if (output > 214748364)
return 0;
output = output * 10;
output = output + t;
tempX = tempX / 10;
}
output = (x > 0) ? output : -output;
if((output > MAX) || (output < MIN)) {
return 0;
}
return output;
}