Be careful about many corner cases.
class Solution {
public:
string numberToWords(int num) {
string res;
vector<string> mp(10);
vector<string> mp1(10);
mp[0]="";
mp[1]="One";
mp[2]="Two";
mp[3]="Three";
mp[4]="Four";
mp[5]="Five";
mp[6]="Six";
mp[7]="Seven";
mp[8]="Eight";
mp[9]="Nine";
mp1[2]="Twenty";
mp1[3]="Thirty";
mp1[4]="Forty";
mp1[5]="Fifty";
mp1[6]="Sixty";
mp1[7]="Seventy";
mp1[8]="Eighty";
mp1[9]="Ninety";
while(num>=100)
{
if(!res.empty())
res+=" ";
string temp;
if(num>=1000000000)
{
temp=numberToWords(num/1000000000);
res+=temp+" Billion";
num%=1000000000;
}
else if(num>=1000000)
{
temp=numberToWords(num/1000000);
res+=temp+" Million";
num%=1000000;
}
else if(num>=1000)
{
temp=numberToWords(num/1000);
res+=temp+" Thousand";
num%=1000;
}
else if(num>=100)
{
res+=mp[num/100]+" Hundred";
num%=100;
}
}
if(!res.empty()&&num)
res+=" ";
if(num>=20)
{
int digit=num/10;
res+=mp1[digit];
if(num%10)
res+=" "+mp[num%10];
}
else if(num>=10&&num<20)
{
switch(num)
{
case 10:
res+="Ten";
break;
case 11:
res+="Eleven";
break;
case 12:
res+="Twelve";
break;
case 13:
res+="Thirteen";
break;
case 14:
res+="Fourteen";
break;
case 15:
res+="Fifteen";
break;
case 16:
res+="Sixteen";
break;
case 17:
res+="Seventeen";
break;
case 18:
res+="Eighteen";
break;
case 19:
res+="Nineteen";
break;
}
}
else if(num>0)
{
res+=mp[num];
}
if(res.empty()&&num==0)
res="Zero";
return res;
}
};