project-euler

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

Euler_13.cpp (1779B)


      1 #include <fstream>
      2 #include <sstream>
      3 
      4 #include "Euler.h"
      5 
      6 std::vector<int> getIndividualDigits(int number)
      7 {
      8     std::vector<int> digits;
      9 
     10     std::string s = std::to_string(number);
     11 
     12     for (int i = s.length() - 1; i >= 0 ; --i)
     13         digits.push_back(atoi(s.substr(i, 1).c_str()));
     14 
     15     return digits;
     16 }
     17 
     18 std::string getSum(std::vector<int> digits)
     19 {
     20     std::string s;
     21 
     22     for (int i = digits.size() - 1; i >= 0; --i)
     23     {
     24         s += std::to_string(digits[i]);
     25     }
     26 
     27     return s;
     28 }
     29 
     30 std::string Euler::LargeSum() {
     31     std::ifstream fin;
     32     std::vector<std::string> numbers;
     33 
     34     fin.open("files/p13_numbers.txt");
     35 
     36     std::string temp;
     37     while(std::getline(fin, temp))
     38         numbers.push_back(temp);
     39 
     40     fin.close();
     41 
     42     std::vector<int> sumDigits;
     43 
     44     for (int i = numbers[0].size() - 1; i >= 0; --i)
     45     {
     46         int exp = 0;
     47 
     48         for (unsigned j = 0; j < numbers.size(); ++j)
     49         {
     50             std::stringstream strValue;
     51             strValue << numbers[j].at(i);
     52 
     53             unsigned int sumDigit;
     54             strValue >> sumDigit;
     55 
     56             exp += sumDigit;
     57         }
     58 
     59         sumDigits.push_back(exp);
     60     }
     61 
     62     std::vector<int> digits = getIndividualDigits(sumDigits[0]);
     63 
     64     for (unsigned i = 1; i < sumDigits.size(); ++i)
     65     {
     66         std::vector<int> temp = getIndividualDigits(sumDigits[i]);
     67 
     68         digits[i] += temp[0];
     69         digits[i + 1] += temp[1];
     70         digits.push_back(temp[2]);
     71     }
     72 
     73     for (unsigned i = 0; i < digits.size(); ++i)
     74     {
     75         if (digits[i] >= 20)
     76         {
     77             digits[i] -= 20;
     78             digits[i + 1] += 2;
     79         }
     80         else if (digits[i] >= 10)
     81         {
     82             digits[i] -= 10;
     83             digits[i + 1] += 1;
     84         }
     85     }
     86 
     87     return getSum(digits).substr(0, 10);
     88 }