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