Code:
char * printcheck(char buffer[], char number[])
{
char * hundreds_n_ones[] =
{
"",
"One ",
"Two ",
"Three ",
"Four ",
"Five ",
"Six ",
"Seven ",
"Eight ",
"Nine "
};
char * specials[] =
{
"Ten ",
"Eleven ",
"Twelve ",
"Thirteen ",
"Fourteen ",
"Fifteen ",
"Sixteen ",
"Seventeen ",
"Eighteen ",
"Nineteen "
};
char * tens[] =
{
"",
"",
"Twenty ",
"Thirty ",
"Forty ",
"Fifty ",
"Sixty ",
"Seventy ",
"Eighty ",
"Ninety "
};
char * levels [] =
{
"",
"Thousand ",
"Million ",
"Billion ",
"Trillion ",
"Quadrillion ",
"Quintillion ",
"Sextillion ",
"Septillion ",
"Octillion ",
"Nintillion ",
"Lots "
};
buffer[0] = 0;
int length = strlen(number);
if(length == 0) return buffer;
int digit, mode, level, place = length;
bool special = false;
int max_level_index = sizeof(levels)/sizeof(levels[0])-1;
for(int i = 0; i < length; ++i, --place)
{
digit = number[i]-'0';
mode = place%3;
if(mode == 1)
{
if(special)
{
special = !special;
strcat(buffer, specials[digit]);
}
else
strcat(buffer, hundreds_n_ones[digit]);
level = (place-1)/3;
if(level)
{
if(level > max_level_index)
level = max_level_index;
digit = level;
strcat(buffer, levels[digit]);
}
}
else if(mode == 2)
{
if(digit == 1)
special = true;
else
strcat(buffer, tens[digit]);
}
else if(mode == 0)
{
strcat(buffer, hundreds_n_ones[digit]);
strcat(buffer, "Hundred ");
}
}
return buffer;
}