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: }