Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

C++ only please! For this challenge, we will explore the algorithm of converting

ID: 675039 • Letter: C

Question

C++ only please!

For this challenge, we will explore the algorithm of converting a numeric amount to its written equivalent. For example, all checks in the United States require a "written amount" in which a number (e.g. 123.45) is converted into its English equivalent ("ONE HUNDRED TWENTY THREE DOLLARS AND FORTY FIVE CENTS"). While this might be trivial for humans to express, it is a non-trivial computer programming challenge and one which every piece of financial software must incorporate. We will rise to meet this challenge!

To accomplish this task, I'd like you to create a set of four functions:

digitName - This function takes as input a whole number and returns the name of the digit as a string from "ONE" to "NINE" (If the number is < 1 or > 9, return an empty string "")

teenName - This function takes as input a whole number and returns the name of the digit as a string from "TEN" to "NINETEEN" (If the number is < 10 or > 19, return an empty string "")

tensName - This function takes as input a whole number and returns the name of the digit as a string from "TWENTY" to "NINETY" (If the number is < 20 or > 99, return an empty string "")

numberToName - This function takes as input a whole number and uses the three previous functions to create and return the string representing the name: (e.g. "ONE HUNDRED TWENTY THREE DOLLARS AND FORTY FIVE CENTS"). Please ensure your function supports numbers 0.00 to 999.99 (e.g. < 1 thousand). For an extra challenge, extend this function to handle numbers to 999,999,999.99 (< 1 billion)

An example transaction with the user would look something like:

Please enter dollar amount $123.45

On a check, $123.45 would be written as:
ONE HUNDRED TWENTY THREE DOLLARS AND FORTY FIVE CENTS

Explanation / Answer

#include <iostream>
using namespace std;

string digitName(int digit)
{
if(digit == 1)
return "ONE";
else if(digit == 2)
return "TWO";
else if(digit == 3)
return "THREE";
else if(digit == 4)
return "FOUR";
else if(digit == 5)
return "FIVE";
else if(digit == 6)
return "SIX";
else if(digit == 7)
return "SEVEN";
else if(digit == 8)
return "EIGHT";
else if(digit == 9)
return "NINE";
else
return "";   
}
string teenName(int teen)
{
if(teen == 10)
return "TEN";
else if(teen == 11)
return "ELEVEN";
else if(teen == 12)
return "TWELVE";
else if(teen == 13)
return "THIRTEEN";
else if(teen == 14)
return "FOURTEEN";
else if(teen == 15)
return "FIFTEEN";
else if(teen == 16)
return "SIXTEEN";
else if(teen == 17)
return "SEVENTEEN";
else if(teen == 18)
return "EIGHTEEN";
else if(teen == 19)
return "NINETEEN";
else
return "";
}
string tensName(int tens)
{
tens = tens/10;
if(tens == 2)
return "TWENTY";
else if(tens == 3)
return "THIRTY";
else if(tens == 4)
return "FORTY";
else if(tens == 5)
return "FIFTY";
else if(tens == 6)
return "SIXTY";
else if(tens == 7)
return "SEVENTY";
else if(tens == 8)
return "EIGHTY";
else if(tens == 9)
return "NINTY";
else
return "";
}
string numberToName(double number)
{
string text = "";
if(number > 99 && number < 1000)
{
text.append(digitName(number/100));
text.append(" HUNDERD ");
number -= (((int)number / 100) * 100);
if(number > 0)
text.append(" AND ");
}
if(number > 19 && number < 100)
{
text.append(tensName(number));
number -= (((int)number / 10) * 10);
if(number > 0)
text.append(" ");
}   
if((int)number > 9 && (int)number < 20)
{
text.append(teenName((int)number));
number -= (int)number;
}
if(number > 0 && number < 10)
{
text.append(digitName(number));
number -= (int)number;
}
text.append(" DOLLARS");
int fractpart = 0;
int count = 0;
while(number > 0 && count < 2)
{
count++;
fractpart = fractpart * 10 + (int)(number * 10);
number = number * 10 - (int)(number * 10);
}
if(fractpart > 0)
{
number = fractpart;
text.append(" AND ");
if(number > 99 && number < 1000)
{
text.append(digitName(number/100));
text.append(" HUNDERD ");
number -= (((int)number / 100) * 100);
if(number > 0)
text.append(" AND ");
}
if(number > 19 && number < 100)
{
text.append(tensName(number));
number -= (((int)number / 10) * 10);
if(number > 0)
text.append(" ");
}   
if(number > 9 && number < 20)
{
text.append(teenName(number));
number -= (int)number;
}
else
{
text.append(digitName(number));
number -= (int)number;
}
}
text.append(" CENTS.");
return text;
}   

int main()
{
string text;
double number;
cout<<"Enter the number: ";
cin>>number;
text = numberToName(number);
cout<<text<<endl;
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote