7. Reverse Integer
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
Solution:
不需要重新写大整数类
- 1, 位数*10代表着升位。
 - 2, 可通过乘10再除以10是否相等来判断是否溢出
 
AC的解法:class Solution {
 public:
  int reverse(int x) {
    int result = 0, judge = 0;
    while (x) {
      judge = result * 10;
      if (judge / 10 != result) {
        return 0;
      }
      result = judge;
      result += x % 10;
      x /= 10;
    }
    return result;
  }
};
之前错误百出的解法:class Solution {
 public:
  int reverse(int x) {
    if (x < pow(-2, 31) || x > pow(2, 31) - 1) return 0;
    vector<int> nums;
    while (x) {
      nums.push_back(x % 10);
      x /= 10;
    }
    int ans = 0, n = nums.size();
    for (int i = n-1; i >= 0; i--) {
      int d = pow(10, i) * nums[n-1-i];
      printf("d = %d\n", d);
      if (d % 10 == 0 || d == 1 || d == -1) {
        if ((ans > pow(2, 31) - 1 - d) || (ans < pow(-2, 31) - d))
          return 0;
        ans += d;
      } else {
        return 0;
      }
      // if (ans < pow(-2, 31) || ans > pow(2, 31) - 1) return 0;
    }
    return ans;
  }
};