void say0to19(int n) { print(smalls[n]); } void say0to99(int n) { const int digit1 = n / 10; const int digit2 = n % 10; if (n < 20) say0to19(n); else { print(tens[digit1]); if (digit2 != 0) { print("-"); say0to19(digit2); } } } void say0to999(int n) { const int digit1 = n / 100; const int restdigs = n % 100; if (n < 100) say0to99(n); else { say0to19(digit1); print(" hundred"); if (restdigs != 0) { print(" and "); say0to99(restdigs); } } } void say0to999999(int n) { const int firstdig = n / 1000; const int restdigs = n % 1000; if (n < 1000) { say0to999(n); return; } say0to999(firstdig); print(" thousand "); if (restdigs != 0) { if (restdigs < 100) print("and "); say0to999(restdigs); } } void say(int n) { const int firstdig = n / 1000000; const int restdigs = n % 1000000; if (n < 1000000) { say0to999999(n); return; } say0to999999(firstdig); print(" million "); if (restdigs != 0) { if (restdigs < 100) print("and "); say0to999999(restdigs); } }