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 }