Last active
October 10, 2015 21:58
-
-
Save henrya2/3757082 to your computer and use it in GitHub Desktop.
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 us
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
int numLetters1_19[] = | |
{ | |
sizeof("one") - 1, | |
sizeof("two") - 1, | |
sizeof("three") - 1, | |
sizeof("four") - 1, | |
sizeof("five") - 1, | |
sizeof("six") - 1, | |
sizeof("seven") - 1, | |
sizeof("eight") - 1, | |
sizeof("nine") - 1, | |
sizeof("ten") - 1, | |
sizeof("eleven") - 1, | |
sizeof("twelve") - 1, | |
sizeof("thirteen") - 1, | |
sizeof("fourteen") - 1, | |
sizeof("fifteen") - 1, | |
sizeof("sixteen") - 1, | |
sizeof("seventeen") - 1, | |
sizeof("eighteen") - 1, | |
sizeof("nineteen") - 1, | |
}; | |
int numLetters2Tens[] = | |
{ | |
sizeof("twenty") - 1, | |
sizeof("thirty") - 1, | |
sizeof("forty") - 1, | |
sizeof("fifty") - 1, | |
sizeof("sixty") - 1, | |
sizeof("seventy") - 1, | |
sizeof("eighty") - 1, | |
sizeof("ninety") - 1, | |
}; | |
#define GET_NUM_LETTERS_1_19(N) numLetters1_19[N - 1] | |
#define GET_NUM_LETTERS_2Tens(N) numLetters2Tens[N - 2] | |
int numLettersHundred = sizeof("hundred") - 1; | |
int numLettersAnd = sizeof("and") - 1; | |
int numLettersThound = sizeof("thousand") - 1; | |
int countLettersLessThan1000(int num) | |
{ | |
int numLetters = 0; | |
int nThousand = num / 1000; | |
if (nThousand > 0) | |
{ | |
numLetters += GET_NUM_LETTERS_1_19(nThousand); | |
numLetters += numLettersThound; | |
} | |
num = num % 1000; | |
int nHundred = num / 100; | |
bool hasHundred = false; | |
if (nHundred > 0) | |
{ | |
numLetters += GET_NUM_LETTERS_1_19(nHundred); | |
numLetters += numLettersHundred; | |
hasHundred = true; | |
} | |
num = num % 100; | |
if (num > 0) | |
{ | |
if (hasHundred) | |
{ | |
numLetters += numLettersAnd; | |
} | |
if (num <= 19) | |
{ | |
numLetters += GET_NUM_LETTERS_1_19(num); | |
} | |
else | |
{ | |
int nTens = num / 10; | |
numLetters += GET_NUM_LETTERS_2Tens(nTens); | |
num = num % 10; | |
if (num > 0) | |
{ | |
numLetters += GET_NUM_LETTERS_1_19(num); | |
} | |
} | |
} | |
return numLetters; | |
} | |
int main(int argc, char* argv[]) | |
{ | |
int totalNumLetters = 0; | |
for (int i = 1; i <= 1000; ++i) | |
{ | |
totalNumLetters += countLettersLessThan1000(i); | |
} | |
printf("%d\n", totalNumLetters); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment