题目来源
题目描述
题目解析
(1)数字和英文字母的对应关系:
- 0的表示:Zero
- 个数位表示方法为:One、Two、Three、Four、Five、Six、Seven、Eight、Nine
- 十几的表示方法为:Ten、Eleven、Twelve、Thirteen、Fourteen、Fifteen、Sixteen、Seventeen、Eighteen、Nineteen
- 几十的表示方位为: Ten、Twenty、Thirty、Forty、Fifty、Sixty、Seventy、Eighty、Ninety
- 千、百万、十亿的表示方位为: Thousand、Million、Billion
(2)
输入: 1234567
输出: “One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven”
输入: 1234567891
输出: " One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"
将数字按照 3 位一组划分
递归
class Solution {
vector<string> bit1 = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
vector<string> bit2 = {"Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
vector<string> unit = {"Billion", "Million", "Thousand", "Hundred"};
vector<int> nums = {1000000000, 1000000, 1000, 100, 20};
/*
* 1,000,000 --- One Million 0;
* */
string helper(int num){
if(num >= nums[0]) // 1000000000 -- Billion
return helper(num / nums[0]) + ' ' + unit[0] + ' ' + helper(num % nums[0]);
else if(num >= nums[1]) //1000000 --- Million
return helper(num / nums[1]) + ' ' + unit[1] + ' ' + helper(num % nums[1]);
else if(num >= nums[2]) // 1000 --- Thousand
return helper(num / nums[2]) + ' ' + unit[2] + ' ' + helper(num % nums[2]);
else if(num >= nums[3]) // 100 --- Hundred
return helper(num / nums[3]) + ' ' + unit[3] + ' ' + helper(num % nums[3]);
else if(num >= nums[4]) // 20 --
return bit2[num / 10 - 2] + ' ' + bit1[num % 10];
return bit1[num];
}
public:
string numberToWords(int num) {
if(num == 0){
return "Zero";
}
// 100010001
// 20
string tmp = helper(num), ans;
int len = tmp.size();
for (int i = 0; i < len; ++i) {
if(tmp[i] != ' '){
ans.push_back(tmp[i]);
}else if(ans.back() != ' '){
ans.push_back(' ');
}
}
while (ans.back() == ' '){
ans.pop_back();
}
return ans;
}
};