题目描述:
Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than INT_MAX.
Example 1:
Input: 123
Output: "One Hundred Twenty Three"
Example 2:
Input: 12345
Output: "Twelve Thousand Three Hundred Forty Five"
Example 3:
Input: 1234567
Output: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
Example 4:
Input: 1234567891
Output: "One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"
class Solution {
public:
string numberToWords(int num) {
if(num == 0) return "Zero";
return helper(num);
}
string helper(int num)
{
string result;
vector<string> num_list = {"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
vector<string> tens_place = {"Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
vector<string> list = {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
int one_billion = 1000000000;
int one_million = 1000000;
int one_thousand = 1000;
if(num >= one_billion)
result = helper(num / one_billion) + " Billion " + helper(num % one_billion);
else if(num >= one_million)
result = helper(num / one_million) + " Million " + helper(num % one_million);
else if(num >= one_thousand)
result = helper(num / one_thousand) + " Thousand " + helper(num % one_thousand);
else
{
int a = num / 100, b = num % 100, c = num % 10;
if(a > 0)
{
result += num_list[a - 1] + " Hundred";
if(b > 0) result += " ";
}
if(b < 20 && b >= 10) result += list[b - 10];
else if(b > 0 && b < 10) result += num_list[c - 1];
else if(b >= 20)
{
result += tens_place[b / 10 - 2];
if(c > 0) result += " " + num_list[c - 1];
}
}
while(result.back() == ' ') result.pop_back();
return result;
}
};