Euler_36.cpp (696B)
1 #include <bitset> 2 #include <sstream> 3 4 #include "Euler.h" 5 6 bool isPalindrome(std::string &n) 7 { 8 for (unsigned int i = 0; i < n.length(); ++i) 9 if (n.at(i) != n.at(n.length() - 1 - i)) 10 return false; 11 12 return true; 13 } 14 15 bool isPalindromeInTwoBases(int i) 16 { 17 std::ostringstream oss; 18 oss << i; 19 20 std::string b10 = oss.str(); 21 22 if (!isPalindrome(b10)) 23 return false; 24 25 std::string b2 = std::bitset<32>(i).to_string(); 26 b2 = b2.substr(b2.find('1')); 27 28 return isPalindrome(b2); 29 } 30 31 llui Euler::DoubleBasedPalindromes() 32 { 33 llui sum = 0; 34 35 for (int i = 1; i < 1e6; ++i) 36 if (isPalindromeInTwoBases(i)) 37 sum += i; 38 39 return sum; 40 }