# 273_Integer_to_English_Words
###### tags: `leetcode`
## Problem Statement
Convert a non-negative integer num to its English words representation.
- Example 1:
> Input: num = 123
Output: "One Hundred Twenty Three"
- Example 2:
> Input: num = 12345
Output: "Twelve Thousand Three Hundred Forty Five"
- Example 3:
> Input: num = 1234567
Output: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
- Example 4:
> Input: num = 1234567891
Output: "One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"
- Constraints:
> 0 <= num <= 2^31^ - 1
## Solution
- Append a function for dealing with number smaller than 100, ```add2```.
- If the number if between ```10``` to ```19```, the this is the ```teen``` catagory.
- Else, need to see whether it is bigger than 10 to see whether to add the ```-ty``` word.
```cpp=
void add2(char a, char b)
{
if (a== '1')
ans.push_back(ten.find(b)->second);
else if (a!= '0')
{
if (b!= '0')
ans.push_back(normal.find(b)->second);
ans.push_back(ty.find(a)->second);
}
else if (b!= '0')
ans.push_back(normal.find(b)->second);
}
```
- The ```map``` attributes are the strings.
```cpp=
map<char, string> normal;
map<char, string> ty;
map<char, string> ten;
normal['1']= "One";
normal['2']= "Two";
normal['3']= "Three";
//......
ten['1']= "Eleven";
ten['2']= "Twelve";
ten['3']= "Thirteen";
//......
ty['2']= "Twenty";
ty['3']= "Thirty";
ty['4']= "Forty";
```
- Remember to reverse the integer for computation.
```cpp=
string n= to_string(num);
reverse(begin(n), end(n));
```
- In the following for-loop, need to deal with value bigger than 100 and add the big value attribute.
- ```temp``` is the index controller for the attribute.
```cpp=
string eng[]= {"Thousand", "Million", "Billion"};
for (int i= 2; i< n.length(); i+= 3)
{
if (n[i]== '0'&& n[i- 1]== '0'&& n[i- 2]== '0')
{
temp++;
continue;
}
if (i!= 2)
ans.push_back(eng[temp++]);
else
temp++;
add2(n[i- 1], n[i- 2]);
if (n[i]!= '0')
{
ans.push_back("Hundred");
ans.push_back(normal.find(n[i])->second);
}
}
```
- Add the last one, is needed when there is leftover for 3 divison.
```cpp=
if (n.length()% 3== 2)
{
if (temp!= -1)
ans.push_back(eng[temp]);
add2(*(n.end()- 1), *(n.end()- 2));
}
else if (n.length()% 3== 1)
{
if (temp!= -1)
ans.push_back(eng[temp]);
add2('0', *(n.end()- 1));
}
```
- Put the strings in the answer sheet in reverse order, remember to add space in beween.
```cpp=
for (vector<string>::iterator i= ans.end()- 1; i!= ans.begin(); i--)
{
aa+= *i;
aa+= " ";
}
aa+= ans[0];
return aa;
```