Reverse Integer

Problem

Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0. Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

Examples

Example 1:

Input: x = 123 Output: 321

Example 2:

Input: x = -123 Output: -321

Example 2:

Input: x = 120 Output: 21

Constraints

  • -231 <= x <= 231 - 1

Solution

For each digit of the input x, pull the least-significant-digit and append it to the result, then shift the result over. Before this computation, we need to check if any of the arithmetic will overflow.

class Solution {
public:
    int reverse(int x) {
        int result = 0;
        constexpr auto MAX = std::numeric_limits<int>::max() / 10;
        constexpr auto MIN = std::numeric_limits<int>::lowest() / 10;
        while(x) {
            // Check if below arithmetic would overflow
            if (result > MAX || result < MIN) {
                return 0;
            }
            // Shift result left and add right-most digit of input
            result *= 10;
            result += x % 10;
            x /= 10;
        }
        return result;
    }
};