Целое число вывести словами на английском языке
Источник: 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();
}
}
Комментарии
Отправить комментарий