Euler_11.cpp (1746B)
1 #include <fstream> 2 3 #include "Euler.h" 4 5 void SumDigits(std::vector<int> &digits, int &greatestProduct) 6 { 7 int temp = digits[0]; 8 9 for(unsigned int j = 1; j < digits.size(); ++j) 10 temp *= digits[j]; 11 12 if (temp > greatestProduct) 13 greatestProduct = temp; 14 } 15 16 int Euler::LargestProductInGrid() 17 { 18 std::ifstream fin; 19 fin.open("files/p11_grid.txt"); 20 std::string grid; 21 std::getline(fin, grid); 22 fin.close(); 23 24 std::vector<int> numGrid = EulerUtility::tokenizer(grid, ' '); 25 26 int greatestProduct = 0; 27 28 for (int i = 0; i < 20; ++i) { 29 for (int j = 0; j <= 20 - 4; ++j) 30 { 31 std::vector<int> digits; 32 33 for (int k = 0; k < 4; ++k) 34 digits.push_back(numGrid[i * 20 + j + k]); 35 36 SumDigits(digits, greatestProduct); 37 } 38 } 39 40 for (int i = 0; i <= 20 - 4; ++i){ 41 for (int j = 0; j < 20; ++j) 42 { 43 std::vector<int> digits; 44 45 for (int k = 0; k < 4; ++k) 46 digits.push_back(numGrid[i + j * 20 + k]); 47 48 SumDigits(digits, greatestProduct); 49 } 50 } 51 52 for (int i = 0; i < 20 - 4; ++i) { 53 for (int j = 0; j <= 20 - 4; ++j) 54 { 55 std::vector<int> digits; 56 57 for (int k = 0; k < 4; ++k) 58 digits.push_back(numGrid[(i + k) * 20 + j + k]); 59 60 SumDigits(digits, greatestProduct); 61 } 62 } 63 64 for (int i = 0; i < 20 - 4; ++i) { 65 for (int j = 19; j >= 3; --j) 66 { 67 std::vector<int> digits; 68 69 for (int k = 0; k < 4; ++k) 70 digits.push_back(numGrid[(i + k) * 20 + j - k]); 71 72 SumDigits(digits, greatestProduct); 73 } 74 } 75 76 return greatestProduct; 77 }