题目来源
将一个整型数字反转,假如反转后溢出则返回0。
我想着搞个long long
类型,然后一位一位的算,然后再判断,写的十分弱鸡,十分不雅,令人看着十分难受,代码如下:
class Solution {
public:
int reverse(int x) {
long long res = 0;
if (x == INT_MIN)
return 0;
int label = 1;
if (x < 0) {
x = -x;
label = -1;
}
while (x) {
res = res * 10 + x % 10;
x = x / 10;
}
if (label == 1 && res > INT_MAX)
return 0;
if (label == -1 && res > static_cast<long long>(INT_MAX) + 1)
return 0;
return label * static_cast<int>(res);
}
};
肯定有更加优雅的写法,以及O(1)的做法。
然后我发现自己想多了,没有O(1)的,不过更优雅的必须有。
代码如下:
class Solution {
public:
int reverse(int x) {
int res = 0;
while (x) {
int tail = x % 10;
int newRes = res * 10 + tail;
if ((newRes - tail) / 10 != res)
return 0;
res = newRes;
x /= 10;
}
return res;
}
};
直接通过除10后是不是等于原来的数来判断是否溢出了,很漂亮很简洁。