#include <stdio.h>
#include <math.h>
void write_number(int a, char *s)
{
int h, t;
char *digits[10] = {"zero", "one", "two", "three", "four", "five", "six",
"seven", "eight", "nine"};
char *tens[10] = {"", "", "twenty", "thirty", "fourty", "fifty",
"sixty", "seventy", "eighty", "ninety"};
char *teens[10] = {"ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen",
"nineteen"};
if (a == 0) return;
h = a / 100;
a -= 100 * h;
t = a / 10;
a -= 10 * t;
if (h > 0) printf("%s hundred ", digits[h]);
if (t > 1) printf("%s ", tens[t]);
else if (t > 0) printf("%s ", teens[a]);
if (t != 1 && a > 0) printf("%s ", digits[a]);
if (*s) printf("%s ", s);
}
void write_cents(double amount)
{
int a;
a = 100 * amount + 0.5;
printf("dollars and ");
if (a != 0) write_number(a, "cents");
else printf("no cents");
putchar('\n');
}
void numtostr(double amount)
{
int n;
char *s[5] = {"", "thousand", "million", "billion", "trillion"};
double base[5] = {1.e0, 1.e3, 1.e6, 1.e9, 1.e12};
if (amount == 0) {
printf("zero\n");
return;
} else if (amount < 0) return;
n = log10(amount) / 3;
while (amount >= 1.0) {
write_number((int)(amount/base[n]), s[n]);
amount = fmod(amount, base[n--]);
}
write_cents(amount);
}
main()
{
double amount;
do {
printf("Input amount $"); scanf("%lf", &amount);
if (amount >= 0) numtostr(amount);
} while (amount > 0.0);
return 0;
}