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_below_20_and_tens(num, below20, tens)
return "" if num == 0
if num < 20
"#{below20[num]} "
elsif num < 100
"#{tens[num / 10]} " + set_below_20_and_tens(num % 10, below20, tens)
else
"#{below20[num / 100]} hundred " + set_below_20_and_tens(num % 100, below20, tens)
end
end
def number_to_words(num, below20, tens)
return "zero" if num == 0
result = ""
if num >= 1_000_000_000
result << set_below_20_and_tens(num / 1_000_000_000, below20, tens) + "billion "
num %= 1_000_000_000
end
if num >= 1_000_000
result << set_below_20_and_tens(num / 1_000_000, below20, tens) + "million "
num %= 1_000_000
end
if num >= 1000
result << set_below_20_and_tens(num / 1000, below20, tens) + "thousand "
num %= 1000
end
if num > 0
result << set_below_20_and_tens(num, below20, tens)
end
result.strip
end
n = 176_283
puts number_to_words(n, below20, tens)
=begin
run:
one hundred seventy six thousand two hundred eighty three
=end