Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 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:
- Did you see a pattern in dividing the number into chunk of words? For example, 123 and 123000
class Solution {
private:
string getNum1(int num)
{
string retString = "";
switch (num)
{
case 1:
retString = "One";
break;
case 2:
retString = "Two";
break;
case 3:
retString = "Three";
break;
case 4:
retString = "Four";
break;
case 5:
retString = "Five";
break;
case 6:
retString = "Six";
break;
case 7:
retString = "Seven";
break;
case 8:
retString = "Eight";
break;
case 9:
retString = "Nine";
break;
}
return retString;
}
string getNum2(int num)
{
string retString = "";
switch (num)
{
case 2:
retString = "Twenty";
break;
case 3:
retString = "Thirty";
break;
case 4:
retString = "Forty";
break;
case 5:
retString = "Fifty";
break;
case 6:
retString = "Sixty";
break;
case 7:
retString = "Seventy";
break;
case 8:
retString = "Eighty";
break;
case 9:
retString = "Ninety";
break;
}
return retString;
}
string getWords(int num)
{
string retString = "";
if (num >= 100)
{
retString = getNum1(num/100) + " Hundred";
num = num % 100;
}
if (num >= 10 && num < 20)
{
if (retString.size() > 0)
retString = retString + " ";
if (num == 10)
retString = retString + "Ten";
else if (num == 11)
retString = retString + "Eleven";
else if (num == 12)
retString = retString + "Twelve";
else if (num == 13)
retString = retString + "Thirteen";
else if (num == 14)
retString = retString + "Fourteen";
else if (num == 15)
retString = retString + "Fifteen";
else if (num == 16)
retString = retString + "Sixteen";
else if (num == 17)
retString = retString + "Seventeen";
else if (num == 18)
retString = retString + "Eighteen";
else if (num == 19)
retString = retString + "Nineteen";
return retString;
}
else if (num >= 20)
{
if (retString.size() > 0)
retString = retString + " ";
retString = retString + getNum2(num/10);
num = num % 10;
}
if (num > 0)
{
if (retString.size() > 0)
retString = retString + " ";
retString = retString + getNum1(num);
}
return retString;
}
string getUnit(int i)
{
switch(i)
{
case 0: return "";
break;
case 1: return " Thousand";
break;
case 2: return " Million";
break;
case 3: return " Billion";
break;
}
return "";
}
public:
string numberToWords(int num) {
if (num == 0)
return "Zero";
string retString = "";
for (int i=0; num>0; i++)
{
int remain = num % 1000;
num = num / 1000;
if (remain != 0)
{
if (retString.size() == 0)
retString = getWords(remain) + getUnit(i);
else
retString = getWords(remain) + getUnit(i) + " " + retString;
}
}
return retString;
}
};