-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathProblem_017.java
More file actions
77 lines (69 loc) · 1.18 KB
/
Problem_017.java
File metadata and controls
77 lines (69 loc) · 1.18 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
package euler;
public class Problem_017 {
static int countLetters() {
return countLetters(1000);
}
private static int countLetters(int n) {
int letters = 0;
for(int i = 1; i < n; i++) {
if(i < 21) {
letters += getLetters(i);
} else if(i < 100) {
letters += getLetters(i / 10 * 10);
letters += getLetters(i % 10);
} else {
letters += getLetters(i / 100) + 7;
if(i % 100 != 0) {
letters += 3; //covers the x-hundred AND x case
if(i % 100 < 21) {
letters += getLetters(i % 100);
} else {
letters += getLetters((i % 100) / 10 * 10);
letters += getLetters(i % 10);
}
}
}
}
return letters + 11;
}
private static int getLetters(int number) {
switch(number) {
case 1:
case 2:
case 6:
case 10:
return 3;
case 4:
case 5:
case 9:
return 4;
case 3:
case 7:
case 8:
case 40:
case 50:
case 60:
return 5;
case 11:
case 12:
case 20:
case 30:
case 80:
case 90:
return 6;
case 15:
case 16:
case 70:
return 7;
case 13:
case 14:
case 18:
case 19:
return 8;
case 17:
return 9;
default:
return 0;
}
}
}