/*
Determine whether an integer is a palindrome.
An integer is a palindrome when it reads the same backward as forward.

Example 1:

Input: 121
Output: true
Example 2:

Input: -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-.
Therefore it is not a palindrome.
Example 3:

Input: 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
Follow up:

Could you solve it without converting the integer to a string?
*/
class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0) return false;
        int result = 0, n = x;
        while (n > 0 && result < INT32_MAX / 10) {
            result = result * 10 + n % 10;
            n /= 10;
        }
        return result == x;
    }

    void test() {
        assert(isPalindrome(121));
        assert(!isPalindrome(-121));
        assert(!isPalindrome(10));
    }
};