project-euler

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

Euler_16.cpp (708B)


      1 #include <numeric>
      2 
      3 #include "Euler.h"
      4 
      5 int Euler::DigitSum()
      6 {
      7     std::vector<int> digits;
      8 
      9     digits.push_back(2);
     10 
     11     for (int i = 1; i < 1000; ++i)
     12     {
     13         for (unsigned j = 0; j < digits.size(); ++j)
     14             digits[j] *=2;
     15 
     16         for (unsigned j = 0; j < digits.size(); ++j)
     17         {
     18             if (digits[j] >= 10)
     19             {
     20                 digits[j] = digits[j] % 10;
     21 
     22                 if (j == digits.size() - 1)
     23                 {
     24                     digits.push_back(1);
     25                 }
     26                 else
     27                 {
     28                     digits[j + 1] += 1;
     29                 }
     30             }
     31         }
     32     }
     33 
     34     return std::accumulate(digits.begin(), digits.end(), 0);
     35 }