The idea is to use a mask integer which is the largest power of 10 that is smaller or equal than x. Then use it as a mask to get the most significant bit (MSD) and compare with the least significant bit (LSD). Next time strip off MSD and LSD and repeat, until the two digits meet.

```
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) return false;
//determine minimum power of 10 smaller or equal than x
int mask = 1;
while (x / mask >= 10) mask *= 10;
while (mask > 1) {
if (x / mask != x % 10) return false;
x = (x % mask) / 10; //strip off first and last digit
mask /= 100; //update mask
}
return true;
}
};
```