Commit | Line | Data |
---|---|---|
3b600ead TL |
1 | int flag; |
2 | int max = 21; | |
3 | char *card[] = | |
4 | { | |
5 | "hundred", | |
6 | "thousand", | |
7 | "million", | |
8 | "billion", | |
9 | "trillion", | |
10 | "quadrillion", | |
11 | "quintillion", | |
12 | "sextillion", | |
13 | "septillion", | |
14 | "octillion", | |
15 | "nonillion", | |
16 | "decillion", | |
17 | "undecillion", | |
18 | "duodecillion", | |
19 | "tredecillion", | |
20 | "quattuordecillion", | |
21 | "quindecillion", | |
22 | "sexdecillion", | |
23 | "septendecillion", | |
24 | "octodecillion", | |
25 | "novemdecillion", | |
26 | "vigintillion" | |
27 | }; | |
28 | char *unit[] = { | |
29 | "zero", | |
30 | "one", | |
31 | "two", | |
32 | "three", | |
33 | "four", | |
34 | "five", | |
35 | "six", | |
36 | "seven", | |
37 | "eight", | |
38 | "nine" | |
39 | }; | |
40 | char *teen[] = { | |
41 | "ten", | |
42 | "eleven", | |
43 | "twelve", | |
44 | "thirteen", | |
45 | "fourteen", | |
46 | "fifteen", | |
47 | "sixteen", | |
48 | "seventeen", | |
49 | "eighteen", | |
50 | "nineteen" | |
51 | }; | |
52 | char *decade[] = { | |
53 | "zero", | |
54 | "ten", | |
55 | "twenty", | |
56 | "thirty", | |
57 | "forty", | |
58 | "fifty", | |
59 | "sixty", | |
60 | "seventy", | |
61 | "eighty", | |
62 | "ninety" | |
63 | }; | |
64 | char line[100]; | |
65 | main() | |
66 | { | |
67 | register c, i, fraction; | |
68 | int r; | |
69 | ||
70 | ||
71 | fraction = 0; | |
72 | while(c = getchar()) { | |
73 | if(!digit(c)) { | |
74 | fraction = (c == '.'); | |
75 | putchar(c); | |
76 | continue; | |
77 | } | |
78 | if(fraction) { | |
79 | while(digit(c)) { | |
80 | putchar(' '); | |
81 | putchar(c); | |
82 | if(!(c=getchar())) | |
83 | exit(1); | |
84 | } | |
85 | putchar(' '); | |
86 | goto out; | |
87 | } | |
88 | ||
89 | putchar(' '); | |
90 | i = 0; | |
91 | line[i++] = '0'; | |
92 | line[i++] = '0'; | |
93 | while(c == '0') | |
94 | if(!(c=getchar())) | |
95 | exit(1); | |
96 | while(digit(c)) { | |
97 | if(i < 98) | |
98 | line[i++] = c; | |
99 | if(!(c=getchar())) | |
100 | exit(1); | |
101 | } | |
102 | line[i] = 0; | |
103 | r = i/3; | |
104 | if(r == 0) { | |
105 | print("zero"); | |
106 | goto out; | |
107 | } | |
108 | conv(line+i-3*r, r); | |
109 | ||
110 | out: | |
111 | fraction = (c == '.'); | |
112 | nline(); | |
113 | printf("...\n"); | |
114 | if(c != '\n') | |
115 | putchar(c); | |
116 | } | |
117 | } | |
118 | ||
119 | conv(p, c) | |
120 | char *p; | |
121 | { | |
122 | ||
123 | if(c > max) { | |
124 | conv(p, c-max); | |
125 | print(card[max]); | |
126 | nline(); | |
127 | p += (c-max)*3; | |
128 | c = max; | |
129 | } | |
130 | while(c > 1) { | |
131 | c--; | |
132 | conv(p, 1); | |
133 | cprint(card[c]); | |
134 | nline(); | |
135 | p += 3; | |
136 | } | |
137 | ones(p[0]); | |
138 | cprint(card[0]); | |
139 | tens(p); | |
140 | ones(p[2]); | |
141 | } | |
142 | ||
143 | ones(d) | |
144 | { | |
145 | if(d=='0') | |
146 | return; | |
147 | print(unit[d-'0']); | |
148 | } | |
149 | ||
150 | tens(p) | |
151 | char *p; | |
152 | { | |
153 | ||
154 | switch(p[1]) { | |
155 | ||
156 | case '0': | |
157 | return; | |
158 | ||
159 | case '1': | |
160 | print(teen[p[2]-'0']); | |
161 | p[2] = '0'; | |
162 | return; | |
163 | } | |
164 | ||
165 | print(decade[p[1]-'0']); | |
166 | } | |
167 | ||
168 | ||
169 | digit(c) | |
170 | { | |
171 | ||
172 | if(c < '0' || c > '9') | |
173 | return(0); | |
174 | return(1); | |
175 | } | |
176 | ||
177 | nline() | |
178 | { | |
179 | ||
180 | if(flag) | |
181 | printf(".\n"); | |
182 | flag = 0; | |
183 | } | |
184 | ||
185 | cprint(s) | |
186 | { | |
187 | ||
188 | if(flag) | |
189 | print(s); | |
190 | } | |
191 | ||
192 | print(s) | |
193 | { | |
194 | ||
195 | if(flag) | |
196 | printf(" "); | |
197 | printf(s); | |
198 | flag = 1; | |
199 | } |