Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 2
31 - 1.
For example,
123 -> "One Hundred Twenty Three" 12345 -> "Twelve Thousand Three Hundred Forty Five" 1234567 -> "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
Hint:
class Solution {
public:
string numberToWords(int num) {
string units[] = {""," Thousand"," Million"," Billion"};
int i = 0;
string res="";
while(num>0) {
int temp = num%1000;
if(temp>0)
res = convert(temp) + units[i] + (res.length()==0 ?"": " "+res);
num /= 1000;
i++;
}
return res.empty()? "Zero" : res;
}
string convert(int num){
string res = "";
string ten[] = {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
string hundred[] = {"Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
string twenty[] = {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
if(num>0) {
int temp = num/100;
if(temp>0) {
res += ten[temp] + " Hundred";
}
temp = num%100;
if(temp>=10 && temp<20){
if(!res.empty()) res +=" ";
res = res + twenty[temp%10];
return res;
}else if(temp>=20){
temp = temp/10;
if(!res.empty()) res +=" ";
res = res + hundred[temp-1];
}
temp = num%10;
if(temp>0) {
if(!res.empty()) res +=" ";
res = res + ten[temp];
}
}
return res;
}
};