void subhundred(int i) { const char *low[19] = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" }; const char *tens[8] = { "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety" }; if (i < 20) printf("%s ", low[i-1]); else { printf("%s", tens[(i/10) - 2]); if (i%10) printf("-%s", low[i%10-1]); printf(" "); } } void partial(int i, int l) { const char *low[9] = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; const char *place[4] = { "", "thousand", "million", "billion" }; if (i/1000 > 0) partial(i/1000,l+1); if (i/100 > 0) printf("%s hundred ", low[(i%1000)/100 - 1]); if (i%100) subhundred(i%100); printf("%s ", place[l]); } void translate(int i) { if (i < 0) { printf("negative "); i=-i; } if (i) partial(i, 0); else printf("zero"); printf("\n"); } int main(int argc, char *argv[]) { if (argc == 2) translate(atoi(argv[1])); else printf("Usage: %s number\n", argv[0]); return 0; }