#include <iostream>
#include <string>
using std::string;
string below20[] = {"", "one", "two", "three", "four", "five", "six", "seven",
"eight", "nine", "ten", "eleven", "twelve", "thirteen",
"fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
"nineteen"};
string tens[] = {"", "", "twenty", "thirty", "forty", "fifty",
"sixty", "seventy", "eighty", "ninety"};
string setBelow20AndTens(int num) {
if (num == 0) return "";
else if (num < 20) return below20[num] + " ";
else if (num < 100) return tens[num / 10] + " " + setBelow20AndTens(num % 10);
else return below20[num / 100] + " hundred " + setBelow20AndTens(num % 100);
}
string numberToWords(int num) {
if (num == 0) return "zero";
string result;
if (num >= 1000000000) {
result += setBelow20AndTens(num / 1000000000) + "billion ";
num %= 1000000000;
}
if (num >= 1000000) {
result += setBelow20AndTens(num / 1000000) + "million ";
num %= 1000000;
}
if (num >= 1000) {
result += setBelow20AndTens(num / 1000) + "thousand ";
num %= 1000;
}
if (num > 0) {
result += setBelow20AndTens(num);
}
// Trim trailing space
while (!result.empty() && result.back() == ' ')
result.pop_back();
return result;
}
int main() {
int n = 176283;
std::cout << numberToWords(n) << std::endl;
}
/*
run:
one hundred seventy six thousand two hundred eighty three
*/