1. 题目
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
2. 思路
如果是负数,先转换为正数在处理,处理之后再补上符号位。
通过模10、余10可以从低到高的按序获得每一位数字,按照乘10累加即可。
注意1:有些数字反转之后会越界,需要特别处理。
注意2:负数反转时要特别注意-2^31直接反转时越界的,要特殊处理。
3. 代码
耗时:16ms
#include <limits>
class Solution {
public:
int reverse(int x) {
if (x == -2147483648) return 0;
int ax = x;
if (x < 0) ax = -x;
//if (ax > numeric_limits<int>::max()) return 0;
int y = r2(ax);
if (x < 0) return -y;
else return y;
}
int r2(int x) {
long long y = r3(x);
if (y > numeric_limits<int>::max()) return 0;
else return y;
}
long long r3(long long x) {
long long y = 0;
while (true) {
if (x < 10) return y * 10 + x;
y = 10 * y + x % 10;
x /= 10;
}
return y;
}
};