将非负整数 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"
提示:
0 <= num <= 231 - 1
cpp
class Solution {
public:
string num0_19[20] = {
"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten",
"Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen",
};
string num20_90[8] = {
"Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety",
};
string num1000[5] = {
"Billion ", "Million ", "Thousand ", "",
};
string get(int x) {
string res;
if (x >= 100) {
res += num0_19[x / 100] + " Hundred ";
x %= 100;
}
if (x >= 20) {
res += num20_90[x / 10 - 2] + " ";
x %= 10;
if (x) res += num0_19[x] + ' ';
} else if (x) {
res += num0_19[x] + ' ';
}
return res;
}
string numberToWords(int num) {
if(!num) return "Zero";
string res;
for(int i = 1e9, j = 0; i >= 1; i /= 1000, j ++ )
if(num >= i) {
res += get(num / i) + num1000[j];
num %= i;
}
res.pop_back();
return res;
}
};