#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;

}