#include <string>
#include <vector>
class ToString {
vector<string> below20 = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine",
"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen",
"Sixteen", "Seventeen", "Eighteen", "Nineteen"
};
vector<string> tens = {"", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
vector<string> thousands = {"", "Thousand", "Million", "Billion"};
//num <1000;
string helper(int num) {
if (num == 0) return "";
string res;
if (num >= 100) {
res += below20[num / 100] + " Hundred";
num %= 100;
}
if (num < 20) {
if (!res.empty()) res += " ";
res += below20[num];
return res;
}
if (!res.empty()) res += " ";
res += tens[num / 10];
num %= 10;
if (num) res += " " + below20[num];
return res;
}
public:
string toString(int x) {
// write code here
if (x == 0) return "Zero";
string res;
int i = 0;
while (x > 0) {
int cur = x % 1000;
if (cur) {
string part = helper(cur);
if (!thousands[i].empty()) part += " "+ thousands[i] + ",";
res = part + res;
}
x /= 1000;
++i;
}
while (!res.empty() && (res.back() == ' ' || res.back() == ',')) {
res.pop_back();
}
return res;
}
};