-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprojectEuler017.cpp
More file actions
115 lines (101 loc) · 2.55 KB
/
Copy pathprojectEuler017.cpp
File metadata and controls
115 lines (101 loc) · 2.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/* 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 <string>
using namespace std;
int onesLetterCount (int one) {
switch (one) {
case 0: return 0;
case 1: return 3;
case 2: return 3;
case 3: return 5;
case 4: return 4;
case 5: return 4;
case 6: return 3;
case 7: return 5;
case 8: return 5;
case 9: return 4;
default: return 0;
}
}
int teensLetterCount (int teen) {
switch (teen) {
case 0: return 3;
case 1: return 6 - 3;
case 2: return 6 - 3;
case 3: return 8 - 5;
case 4: return 8 - 4;
case 5: return 7 - 4;
case 6: return 7 - 3;
case 7: return 9 - 5;
case 8: return 8 - 5;
case 9: return 8 - 4;
default: return 0;
}
}
int tensLetterCount (int ten, int one) {
switch (ten) {
case 0: return 0;
case 1: return teensLetterCount (one);
case 2: return 6;
case 3: return 6;
case 4: return 5;
case 5: return 5;
case 6: return 5;
case 7: return 7;
case 8: return 6;
case 9: return 6;
default: return 0;
}
}
int hundLetterCount (int hun) {
switch (hun) {
case 0: return 0;
case 1: return 10;
case 2: return 10;
case 3: return 12;
case 4: return 11;
case 5: return 11;
case 6: return 10;
case 7: return 12;
case 8: return 12;
case 9: return 11;
default: return 0;
}
}
int main () {
int letterCount = 0;
for (int i = 1; i <= 1000; i++) {
string s = to_string (i);
if (i < 10) {
letterCount += onesLetterCount (i);
} else if (i < 100) {
int ones = s [1] - 48;
int tens = s [0] - 48;
letterCount += onesLetterCount (ones);
letterCount += tensLetterCount (tens, ones);
} else if (i < 1000) {
int ones = s [2] - 48;
int tens = s [1] - 48;
int hund = s [0] - 48;
letterCount += onesLetterCount (ones);
letterCount += tensLetterCount (tens, ones);
letterCount += hundLetterCount (hund);
if (tens != 0 || ones != 0) {
letterCount += 3; // and
}
} else {
letterCount += 11; // one thousand
}
}
cout << letterCount << endl;
}