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

I have a problem I have to solve with c++ and I need help please. The question i

ID: 3737222 • Letter: I

Question

I have a problem I have to solve with c++ and I need help please. The question is : Computers are frequently employed in check-writing systems such as payroll and accounts payable applications. Write a program that inputs a numeric check amount (an integer between 0 and 4 billion) and writes the word equivalent of the amount. For example, the amount 221 should be written as: TWO HUNDRED TWENTY ONE DOLLARS. 1005021 should be written as: ONE MILLION FIVE THOUSAND and TWENTY ONE DOLLARS. My code doesn't work 100%. The second number section doesn't produce anything. For example, 25 comes out as five. Also anything past 1000 doesn't work either. Can some one help? Here is my code:

#include "stdafx.h"

#include <iostream>

#include <cmath>

using namespace std;

int reverse(int v, int lim)

{

if (lim == 1)

return v;

else

return (((v % 10)*pow(10, lim - 1)) + reverse(v / 10, lim - 1));

}

void print_c(int digit, int l, int r = 12)

{

if (l != 2)

{

switch (digit)

{

case 1: cout << "One";

break;

case 2: cout << "Two";

break;

case 3: cout << "Three";

break;

case 4: cout << "Four";

break;

case 5: cout << "Five";

break;

case 6: cout << "Six";

break;

case 7: cout << "Seven";

break;

case 8: cout << "Eight";

break;

case 9: cout << "Nine";

break;

}

}

else if (l == 2)

{

switch (digit)

{

case 1: switch (r)

{

case 10: cout << "Ten";

break;

case 11: cout << "Eleven";

break;

case 12: cout << "Twelve";

break;

case 13: cout << "Thirteen";

break;

case 14: cout << "Forteen";

break;

case 15: cout << "Fifteen";

break;

case 16: cout << "Sixteen";

break;

case 17: cout << "Seventeen";

break;

case 18: cout << "Eighteen";

break;

case 19: cout << "Nineteen";

break;

}

break;

case 20: cout << "Twenty";

break;

case 30: cout << "Thirty";

break;

case 40: cout << "Forty";

break;

case 50: cout << "Fifty";

break;

case 60: cout << "Sixty";

break;

case 70: cout << "Seventy";

break;

case 80: cout << "Eighty";

break;

case 90: cout << "Ninty";

break;

case 0: cout << " ";

break;

}

}

}

int main()

{

int num, temp, length = 0, result, n, m = 0;

cout << " Enter the number" << endl;

cin >> num;

temp = num;

for (;num > 0; num /= 10)

{

length++;

}

result = reverse(temp, length);

while (result)

{

n = result % 10;

m = m * 10 + n;

result /= 10;

if (length == 1)

{

print_c(n, length);

}

else if (length == 2)

{

if (n == 1)

{

print_c(n, length, result);

break;

}

else

{

print_c(n, length);

length--;

}

}

else if (length == 3)

{

print_c(n, length);

length--;

if (n != 0)

{

cout << "hundred";

}

}

else if (length == 4)

{

print_c(n, length);

length--;

cout << "Thousand";

}

else if (length == 7)

{

print_c(n, length);

length--;

cout << "Million";

}

else if (length == 13)

{

print_c(n, length);

length--;

cout << "Billion";

}

}

system("pause");

return 0;

}

Explanation / Answer

Following is the C++ Code:

#include <iostream>
using namespace std;

string one[] = { "", "one ", "two ", "three ", "four ",
"five ", "six ", "seven ", "eight ",
"nine ", "ten ", "eleven ", "twelve ",
"thirteen ", "fourteen ", "fifteen ",
"sixteen ", "seventeen ", "eighteen ",
"nineteen "
};

string ten[] = { "", "", "twenty ", "thirty ", "forty ",
"fifty ", "sixty ", "seventy ", "eighty ",
"ninety "
};

// n is 1- or 2-digit number
string numToWords(int n, string s)
{
string str = "";
// if n is more than 19, divide it
if (n > 19)
str += ten[n / 10] + one[n % 10];
else
str += one[n];

// if n is non-zero
if (n)
str += s;

return str;
}

// Function to print a given number in words
string convertToWords(long n)
{
string out;
out += numToWords((n / 1000000000), "Billion ");

out += numToWords(((n / 1000000) % 100), "million ");

out += numToWords(((n / 1000) % 100), "thousand ");

out += numToWords(((n / 100) % 10), "hundred ");

if (n > 100 && n % 100)
out += "and ";
out += numToWords((n % 100), "");

return out;
}

int main()
{
long n = 1005021;
cout << convertToWords(n)<< "Dollers" << endl;

return 0;
}