原题地址(简单)

此题虽不算太难,但涉及到了几个不常见的知识点。

知识点

1. c++负数取余

c++取余的符号取决于被除数,所以说 -6 % 4 == -26 % 4 == 2

2. c++int范围

int是32位,范围是 -2147483648 ~ +2147483647 ,也就是 -2^{31} ~ 2^{31} - 1

代码

  1. class Solution {
  2. public:
  3. int reverse(int x) {
  4. int ans = 0;
  5. while(x) {
  6. if(ans <= 214748364 && ans >= -214748364)
  7. ans *= 10;
  8. else return 0;
  9. if((ans >= 0 && 2147483647 - ans >= x%10) || (ans < 0 && -2147483648 - ans <= x%10))
  10. ans += x % 10;
  11. else return 0;
  12. x /= 10;
  13. }
  14. return ans;
  15. }
  16. };
  1. class Solution {
  2. public:
  3. int reverse(int x) {
  4. int rev = 0;
  5. while (x != 0) {
  6. int pop = x % 10;
  7. x /= 10;
  8. if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
  9. if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
  10. rev = rev * 10 + pop;
  11. }
  12. return rev;
  13. }
  14. };
  15. 作者:LeetCode
  16. 链接:https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-by-leetcode/
  17. 来源:力扣(LeetCode
  18. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。