First post here. A little program I made, that converts a number written in decimals in words. Hope someone considers this useful.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string digit[1000] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fouteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"},
expo [] = {"", "thousand,", "million,", "billion", "trillion,", "quadrillion,"};
vector <string> engNum;
int st, niv;
void Set (int st, int niv) {
if (!st)
return;
engNum.push_back (" " + expo[niv]);
if (st % 100 <= 20 ) {
engNum.push_back (" " + digit[st % 100]);
}
else {
if (st % 10 != 0)
engNum.push_back (" " + digit[st % 10]);
if ((st / 10) % 10 != 0)
engNum.push_back (" " + digit[st % 100 - st % 10]);
}
if (st / 100 != 0)
engNum.push_back (" " + digit[st / 100] + " " + digit[100] + " and");
}
int main()
{
string x;
digit[30] = "thirty"; digit[40] = "fourty"; digit[50] = "fifty"; digit[60] = "sixty"; digit[70] = "seventy"; digit[80] = "eighty"; digit[90] = "ninety", digit[100] = "hundred";
for (;;) {
cin >> x;
if (x == "0")
cout << " zero\n";
else {
for (int i = x.size () - 1, niv = 0; i >= 0; i = i - 3) {
if (i >= 2) {
st = (x.at (i) - 48) + (x.at (i - 1) - 48) * 10 + (x.at (i - 2) - 48) * 100;
Set (st, niv);
niv++;
}
else {
if (i == 1) {
st = (x.at (i) - 48) + (x.at (i - 1) - 48) * 10;
Set (st, niv);
}
else {
st = (x.at (i) - 48);
Set (st, niv);
}
}
}
for (int i = engNum.size () - 1; i >= 0; i--) {
if (i == 0) {
x = engNum [0];
if (x.at (x.size () - 1) == ',')
x.at (x.size () - 1) = ' ';
cout << x;
break;
}
cout << engNum;
}
cout << "\n";
engNum.clear();
}
}
return 0;
}