Целое число вывести словами на английском языке

Источник: https://leetcode.com/problems/integer-to-english-words/

Дано целое число num. Вывести его словами на английском языке.

Пример 1:

Дано: num = 123
Результат: "One Hundred Twenty Three"

Пример 2:

Дано: num = 12345
Результат: "Twelve Thousand Three Hundred Forty Five"

Пример 3:

Дано: num = 1234567
Результат: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"

Пример 4:

Дано: num = 1234567891
Результат: "One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"

Ограничения:

  • 0 <= num <= 231 - 1

Имплементация

class Solution {
    public String numberToWords(int num) {
        if(num==0) {
            return "Zero";
        }
        return helper(num);
    }

    public String helper(int num) {
        String[] words = new String[] {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine",
// числа 0-19 занимают индексы 0-19
        "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen",
// в индексах 20-27 идут десятки
        "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
        StringBuilder res = new StringBuilder();
        
        if(num>=1000000000) { // x миллиардов
// x = num/миллиард и рассчитываем остаток от деления на миллиард

            res.append(helper(num/1000000000)).append(" Billion ").append(helper(num%1000000000));
        } else if(num>=1000000) { // x миллион

// x = num/миллион и рассчитываем остаток от деления на миллион
            res.append(helper(num/1000000)).append(" Million ").append(helper(num%1000000));
        } else if(num>=1000) { // x тысяч

// x = num/тысяча и рассчитываем остаток от деления на тысячу
            res.append(helper(num/1000)).append(" Thousand ").append(helper(num%1000));
        } else if(num>=100) { // x сотен

// x = num/тысяча и рассчитываем остаток от деления на тысячу
            res.append(helper(num/100)).append(" Hundred ").append(helper(num%100));
        } else if(num>=20) { // число больше 20
// находится в индексе 20-27
// 20->20=20+0=20+(2*-20)/10
// 30->21=20+1
=20+(3*-20)/10
// 40->22=20+2
=20+(4*-20)/10
// 50->23=20+3
=20+(5*-20)/10
// 60->24=20+4
=20+(6*-20)/10
// 70->25=20+5
=20+(7*-20)/10
// 80->26=20+6
=20+(8*-20)/10
// 90->27=20+7
=20+(9*-20)/10
// индекс десятка двухзначного числа = (num-20)/10+20
            res.append(words[(num-20)/10+20]).append(" ").append(words[num%10]);
        } else { // число меньше 20 берем из индекса 0-19
            res.append(words[num]);
        }
        
        return res.toString().trim();
    }
}

Комментарии

Популярные сообщения из этого блога

Разбиение числа на сумму с максимальным произведнием слагаемых

Число подмассивов, в которых сумма элементов равна k

Сложить два числа, которые представлены списком