How to convert an integer into its written‑out English words in Kotlin

1 Answer

0 votes
val below20 = listOf(
    "", "one", "two", "three", "four", "five", "six", "seven",
    "eight", "nine", "ten", "eleven", "twelve", "thirteen",
    "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
    "nineteen"
)

val tens = listOf(
    "", "", "twenty", "thirty", "forty", "fifty",
    "sixty", "seventy", "eighty", "ninety"
)

fun setBelow20AndTens(num: Int): String =
    when {
        num == 0 -> ""
        num < 20 -> below20[num] + " "
        num < 100 -> tens[num / 10] + " " + setBelow20AndTens(num % 10)
        else -> below20[num / 100] + " hundred " + setBelow20AndTens(num % 100)
    }

fun numberToWords(n: Int): String {
    if (n == 0) return "zero"

    var num = n
    val result = StringBuilder()

    if (num >= 1_000_000_000) {
        result.append(setBelow20AndTens(num / 1_000_000_000)).append("billion ")
        num %= 1_000_000_000
    }
    if (num >= 1_000_000) {
        result.append(setBelow20AndTens(num / 1_000_000)).append("million ")
        num %= 1_000_000
    }
    if (num >= 1000) {
        result.append(setBelow20AndTens(num / 1000)).append("thousand ")
        num %= 1000
    }
    if (num > 0) {
        result.append(setBelow20AndTens(num))
    }

    return result.toString().trim()
}

fun main() {
    val n = 176_283
    
    println(numberToWords(n))
}



/*
run:

one hundred seventy six thousand two hundred eighty three

*/

 



answered May 5 by avibootz
...