Euler_17.cpp (1248B)
1 #include "Euler.h" 2 3 int digit(std::string digits[], std::string teens[], int j, int k) 4 { 5 return (k > 0) ? ((j == 1) ? teens[k - 1].length() : digits[k - 1].length()) : 0; 6 } 7 8 int tenz(int ten, int j, int k) 9 { 10 return (j == 1) ? ((k == 0) ? ten : 0) : ten; 11 } 12 13 int _and(int count) 14 { 15 return ((count >= 100) && (count % 100 != 0)) ? std::string("and").length() : 0; 16 } 17 18 int x_hundred(std::string digits[], int i) 19 { 20 return (i > 0) ? digits[i - 1].length() + std::string("hundred").length() : 0; //x hundred 21 } 22 23 int Euler::LetterCounter() 24 { 25 std::string digits[] = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; 26 std::string teens[] = { "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}; 27 std::string tens[] = { "", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"}; 28 29 int sum = digits[0].length() + std::string("thousand").length(); //one thousand 30 31 for (int i = 0; i < 10; ++i) 32 for (int j = 0; j < 10; ++j) 33 for (int k = 0; k < 10; ++k) 34 sum += x_hundred(digits, i) + _and(i * 100 + j * 10 + k) + tenz(tens[j].length(), j, k) + digit(digits, teens, j, k); 35 36 return sum; 37 }