#include class PalindromeNumberSolution { private: void palindromer(unsigned long x, unsigned long *p, unsigned long d, unsigned long *max_d) { if (x == 0) return; if (d > *max_d) *max_d = d; palindromer(x / 10, p, d * 10, max_d); *p += x % 10 * (*max_d / d); return; } public: bool isPalindrome(int x) { if (x < 0) return false; if (x < 10) return true; auto absX = (unsigned long)x; std::cout << "absX = " << absX << std::endl; unsigned long palindrome = 0; unsigned long max_d = 0; palindromer(absX, &palindrome, 1, &max_d); //std::cout << "reverse(absX) = " << palindrome << std::endl; return absX == palindrome; } };