-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patheuler17.c
More file actions
97 lines (94 loc) · 2.19 KB
/
euler17.c
File metadata and controls
97 lines (94 loc) · 2.19 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
#include <stdio.h>
int lettersIn(int num);
int main(void)
{
int sum = 0;
int max;
printf("max:\n");
scanf("%d", &max);
for (int i = 1; i <= max; i++)
{
sum+= lettersIn(i);
}
printf("%d\n", sum);
return 0;
}
int lettersIn(int num)
{
if (num < 0)
{
printf("Error: lettersIn was passed negative integer\n");
return 0;
}
else if (num > 1000)
{
printf("Error: lettersIn was passed integer greater than 1000\n");
return 0;
}
else if (num == 0)
{
return 0;
}
else if (num < 20)
{
switch(num)
{
case 1: // one
case 2: // two
case 6: // six
case 10: // ten
return 3;
case 4: // four
case 5: // five
case 9: // nine
return 4;
case 3: // three
case 7: // seven
case 8: // eight
return 5;
case 11: // eleven
case 12: // twelve
return 6;
case 15: // fifteen
case 16: // sixteen
return 7;
case 13: // thirteen
case 14: // fourteen
case 18: // eighteen
case 19: // nineteen
return 8;
case 17: // seventeen
return 9;
}
}
else if (num < 100)
{
switch(num/10) // tens digit
{
case 4: // forty X
case 5: // fifty X
case 6: // sixty X
return 5 + lettersIn(num%10);
case 2: // twenty X
case 3: // thirty X
case 8: // eighty X
case 9: // ninety X
return 6 + lettersIn(num%10);
case 7: // seventy X
return 7 + lettersIn(num%10);
}
}
else if (num < 1000)
{
if (num%100 == 0)
return lettersIn(num/100) + 7;
/* X hundred */
else
return lettersIn(num/100) + 7 + 3 + lettersIn(num%100);
/* X hundred and Y */
}
else
{
return 11; // one thousand
}
}