|
|
1.1 root 1:
2: static char sccsid[] = " number.c 4.1 82/10/24 ";
3:
4: int flag;
5: int max = 21;
6: char *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: };
31: char *unit[] = {
32: "zero",
33: "one",
34: "two",
35: "three",
36: "four",
37: "five",
38: "six",
39: "seven",
40: "eight",
41: "nine"
42: };
43: char *teen[] = {
44: "ten",
45: "eleven",
46: "twelve",
47: "thirteen",
48: "fourteen",
49: "fifteen",
50: "sixteen",
51: "seventeen",
52: "eighteen",
53: "nineteen"
54: };
55: char *decade[] = {
56: "zero",
57: "ten",
58: "twenty",
59: "thirty",
60: "forty",
61: "fifty",
62: "sixty",
63: "seventy",
64: "eighty",
65: "ninety"
66: };
67: char line[100];
68: main()
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:
113: out:
114: fraction = (c == '.');
115: nline();
116: printf("...\n");
117: if(c != '\n')
118: putchar(c);
119: }
120: }
121:
122: conv(p, c)
123: char *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:
146: ones(d)
147: {
148: if(d=='0')
149: return;
150: print(unit[d-'0']);
151: }
152:
153: tens(p)
154: char *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:
172: digit(c)
173: {
174:
175: if(c < '0' || c > '9')
176: return(0);
177: return(1);
178: }
179:
180: nline()
181: {
182:
183: if(flag)
184: printf(".\n");
185: flag = 0;
186: }
187:
188: cprint(s)
189: {
190:
191: if(flag)
192: print(s);
193: }
194:
195: print(s)
196: {
197:
198: if(flag)
199: printf(" ");
200: printf(s);
201: flag = 1;
202: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.