project-euler

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

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 }