below20 = [
"", "one", "two", "three", "four", "five", "six", "seven",
"eight", "nine", "ten", "eleven", "twelve", "thirteen",
"fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
"nineteen"
]
tens = [
"", "", "twenty", "thirty", "forty", "fifty",
"sixty", "seventy", "eighty", "ninety"
]
def set_below20_and_tens(num):
if num == 0:
return ""
elif num < 20:
return below20[num] + " "
elif num < 100:
return tens[num // 10] + " " + set_below20_and_tens(num % 10)
else:
return below20[num // 100] + " hundred " + set_below20_and_tens(num % 100)
def number_to_words(num):
if num == 0:
return "zero"
result = ""
if num >= 1_000_000_000:
result += set_below20_and_tens(num // 1_000_000_000) + "billion "
num %= 1_000_000_000
if num >= 1_000_000:
result += set_below20_and_tens(num // 1_000_000) + "million "
num %= 1_000_000
if num >= 1000:
result += set_below20_and_tens(num // 1000) + "thousand "
num %= 1000
if num > 0:
result += set_below20_and_tens(num)
return result.rstrip()
n = 176283
print(number_to_words(n))
'''
run:
one hundred seventy six thousand two hundred eighty three
'''