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