|
|
1.1 root 1: /*
2: * print numbers
3: */
4:
5: #include <stdio.h>
6: #include <ctype.h>
7:
8: int flag;
9: int max = 21;
10: char *card[] = {
11: "hundred",
12: "thousand",
13: "million",
14: "billion",
15: "trillion",
16: "quadrillion",
17: "quintillion",
18: "sextillion",
19: "septillion",
20: "octillion",
21: "nonillion",
22: "decillion",
23: "undecillion",
24: "duodecillion",
25: "tredecillion",
26: "quattuordecillion",
27: "quindecillion",
28: "sexdecillion",
29: "septendecillion",
30: "octodecillion",
31: "novemdecillion",
32: "vigintillion"
33: };
34: char *unit[] = {
35: "zero",
36: "one",
37: "two",
38: "three",
39: "four",
40: "five",
41: "six",
42: "seven",
43: "eight",
44: "nine"
45: };
46: char *teen[] = {
47: "ten",
48: "eleven",
49: "twelve",
50: "thirteen",
51: "fourteen",
52: "fifteen",
53: "sixteen",
54: "seventeen",
55: "eighteen",
56: "nineteen"
57: };
58: char *decade[] = {
59: "zero",
60: "ten",
61: "twenty",
62: "thirty",
63: "forty",
64: "fifty",
65: "sixty",
66: "seventy",
67: "eighty",
68: "ninety"
69: };
70: char line[100];
71: main()
72: {
73: register c, i, fraction;
74: int r;
75:
76: setbuf(stdout, NULL);
77: fraction = 0;
78: while ((c = getchar()) != EOF) {
79: if(!isdigit(c)) {
80: fraction = (c == '.');
81: putchar(c);
82: continue;
83: }
84: if(fraction) {
85: while(isdigit(c)) {
86: putchar(' ');
87: putchar(c);
88: if ((c = getchar()) == EOF)
89: exit(1);
90: }
91: putchar(' ');
92: goto out;
93: }
94: putchar(' ');
95: i = 0;
96: line[i++] = '0';
97: line[i++] = '0';
98: while(c == '0')
99: if ((c = getchar()) == EOF)
100: exit(1);
101: while(isdigit(c)) {
102: if(i < 98)
103: line[i++] = c;
104: if ((c = getchar()) == EOF)
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:
115: out:
116: fraction = (c == '.');
117: nline();
118: printf("...\n");
119: if(c != '\n')
120: putchar(c);
121: }
122: }
123:
124: conv(p, c)
125: char *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:
148: ones(d)
149: {
150: if(d=='0')
151: return;
152: print(unit[d-'0']);
153: }
154:
155: tens(p)
156: char *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: nline()
174: {
175:
176: if(flag)
177: printf(".\n");
178: flag = 0;
179: }
180:
181: cprint(s)
182: char *s;
183: {
184:
185: if(flag)
186: print(s);
187: }
188:
189: print(s)
190: char *s;
191: {
192:
193: if(flag)
194: printf(" ");
195: printf(s);
196: flag = 1;
197: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.