package main
import (
"fmt"
"strings"
)
var below20 = []string{
"", "one", "two", "three", "four", "five", "six", "seven",
"eight", "nine", "ten", "eleven", "twelve", "thirteen",
"fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
"nineteen",
}
var tens = []string{
"", "", "twenty", "thirty", "forty", "fifty",
"sixty", "seventy", "eighty", "ninety",
}
func setBelow20AndTens(num int) string {
if num == 0 {
return ""
} else if num < 20 {
return below20[num] + " "
} else if num < 100 {
return tens[num/10] + " " + setBelow20AndTens(num%10)
} else {
return below20[num/100] + " hundred " + setBelow20AndTens(num%100)
}
}
func numberToWords(num int) string {
if num == 0 {
return "zero"
}
result := ""
if num >= 1_000_000_000 {
result += setBelow20AndTens(num/1_000_000_000) + "billion "
num %= 1_000_000_000
}
if num >= 1_000_000 {
result += setBelow20AndTens(num/1_000_000) + "million "
num %= 1_000_000
}
if num >= 1000 {
result += setBelow20AndTens(num/1000) + "thousand "
num %= 1000
}
if num > 0 {
result += setBelow20AndTens(num)
}
return strings.TrimSpace(result)
}
func main() {
n := 176283
fmt.Println(numberToWords(n))
}
/*
run:
one hundred seventy six thousand two hundred eighty three
*/