class Solution {
public:
string numberToWords(int num) {
vector<string> three{"Thousand", "Million", "Billion"};
string res =hundred(num%1000);
int three_idx = 0;
while(num>0){
num /= 1000;
res = num%1000? hundred(num%1000)+" "+three[three_idx]+(res.empty()?"":" "+res):res;
three_idx++;
}
return res.empty()?"Zero":res;
}
string hundred(int num){
vector<string> v1 = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
vector<string> v2 = {"", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
string res="";
if(num/100!=0) res+=v1[num/100]+" Hundred";
if(num%100<20){
return res+=(!res.empty()&&num%100!=0?" ":"")+v1[num%100];
}
return res+=(res.empty()?"":" ")+v2[num%100/10]+(num%10==0?"":" "+v1[num%10]);
}
};
感觉这道题的难点其实在于如何处理中间的space