Zachary Stence

Problem 17: Number letter counts

If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total.

If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?


NOTE: Do not count spaces or hyphens. For example, 342 (three hundred and forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20 letters. The use of "and" when writing out numbers is in compliance with British usage.

#include<iostream>
#include<math.h>
using namespace std;

int count(int num) {
  int hundreds = num / 100;
  int tens = num / 10;
  int ones = num % 10;
  int c = 0;

  if (num == 1000) { //4 digits
    c += 11; //"one thousand" has 11 letters
  }


  else if (num <= 999 && num >= 100) { //3 digits
    if (num % 100 == 0) // ... hundred
      c += (count(hundreds) + 7);
    else { // ... hundred and ...
      c += (count(hundreds) + 7 + 3);
      c += count(num % 100);
    }
  }


  else if (num <= 99 && num >= 10) { //2 digits
    switch(tens) {
      case 1:
        switch(ones) {
          case 0: c += 3; break; //ten
          case 1: c += 6; break; //eleven
          case 2: c += 6; break; //twelve
          case 3: c += 8; break; //thirteen
          case 4: c += 8; break; //...
          case 5: c += 7; break;
          case 6: c += 7; break;
          case 7: c += 9; break;
          case 8: c += 8; break;
          case 9: c += 8; break; //nineteen
        }
        return c;
      case 2: c += 6; break; //twenty
      case 3: c += 6; break; //thirty
      case 4: c += 5; break; //fourty
      case 5: c += 5; break; //...
      case 6: c += 5; break;
      case 7: c += 7; break;
      case 8: c += 6; break;
      case 9: c += 6; break; //ninety
    }
    c += count(ones);
  }


  else if (num <= 9 && num >= 1){ //1 digit
    switch (num) {
      case 0: break;
      case 1: c += 3; break; //one
      case 2: c += 3; break; //two
      case 3: c += 5; break; //three
      case 4: c += 4; break; //four
      case 5: c += 4; break; //...
      case 6: c += 3; break;
      case 7: c += 5; break;
      case 8: c += 5; break;
      case 9: c += 4; break; //nine
    }
  }


  return c;
}





int main() {
  int sum = 0;
  for (int i = 1; i <= 1000; i++) {
    sum += count(i);
  }
  cout << sum << endl;
}

Answer: 21124