1
unordered_map<int, string> mp_0 = {2
{1, "One "}, {2, "Two "}, {3, "Three "}, {4, "Four "}, {5, "Five "},3
{6, "Six "}, {7, "Seven "}, {8, "Eight "}, {9, "Nine "}, {10, "Ten "},4
{11, "Eleven "}, {12, "Twelve "}, {13, "Thirteen "}, {14, "Fourteen "}, {15, "Fifteen "},5
{16, "Sixteen "}, {17, "Seventeen "}, {18, "Eighteen "}, {19, "Nineteen "}};7
unordered_map<int, string> mp_10 = {{20, "Twenty "}, {30, "Thirty "}, {40, "Forty "},8
{50, "Fifty "}, {60, "Sixty "}, {70, "Seventy "},9
{80, "Eighty "}, {90, "Ninety "}};12
void Solve2(string &ans, int num) {13
ans = mp_0[num] + ans;16
void Solve(string &ans, int num) {18
for (int i = 0; num > 0; i++) {21
Solve2(ans, num % 100);25
if (num % 10 != 0) ans = mp_0[num % 10] + ans;29
else if (factor == 10) {30
if (num % 10 != 0) ans = mp_10[(num % 10) * 10] + ans;33
else if (factor == 100) {34
if (num % 10 != 0) ans = (mp_0[num % 10] + "Hundred ") + ans;43
string numberToWords(int num) {46
if (num == 0) return "Zero";50
for (int i = 0; num > 0; i++) {52
if (num % 1000 > 0) ans = "Thousand " + ans;54
if (num % 1000 > 0) ans = "Million " + ans;56
ans = "Billion " + ans;58
Solve(ans, num % 1000);