原题地址(简单)
此题虽不算太难,但涉及到了几个不常见的知识点。
知识点
1. c++负数取余
c++取余的符号取决于被除数,所以说 -6 % 4 == -2
, 6 % 4 == 2
2. c++int范围
int是32位,范围是 -2147483648 ~ +2147483647
,也就是 -2^{31} ~ 2^{31} - 1
代码
class Solution {
public:
int reverse(int x) {
int ans = 0;
while(x) {
if(ans <= 214748364 && ans >= -214748364)
ans *= 10;
else return 0;
if((ans >= 0 && 2147483647 - ans >= x%10) || (ans < 0 && -2147483648 - ans <= x%10))
ans += x % 10;
else return 0;
x /= 10;
}
return ans;
}
};
class Solution {
public:
int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
};
作者:LeetCode
链接:https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。