project-euler

https://projecteuler.net/
Log | Files | Refs | README

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 }