Untitled

 avatar
unknown
plain_text
a year ago
3.6 kB
11
Indexable
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;

string helper(int num) {
    vector<string> belowTwenty = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
                                  "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
    vector<string> tens = {"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
    if (num == 0) return "";
    else if (num < 20) return belowTwenty[num] + " ";
    else if (num < 100) return tens[num / 10] + " " + helper(num % 10);
    else return belowTwenty[num / 100] + " hundred " + helper(num % 100);
}

string numberToWords(int num) {
    vector<string> belowTwenty = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
                                  "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
    vector<string> tens = {"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
    vector<string> thousands = {"", "thousand", "million", "billion"};

    if (num == 0) return "zero";

    string result;
    int i = 0;
    while (num > 0) {
        if (num % 1000 != 0) {
            result = helper(num % 1000) + thousands[i] + " " + result;
        }
        num /= 1000;
        i++;
    }
    while (!result.empty() && result.back() == ' ') result.pop_back();  // Trim trailing space
    return result;
}


string convertCurrency(string numStr) {
    // Remove the leading '$'
    numStr.erase(0, 1);

    // Split into dollar and cent parts
    size_t dotPos = numStr.find('.');
    string dollarPart = numStr.substr(0, dotPos);
    string centPart = dotPos == string::npos ? "" : numStr.substr(dotPos + 1);

    // Convert the dollar part
    int dollarNum = stoi(dollarPart);
    string dollarWords = numberToWords(dollarNum);
    if (dollarNum == 1) dollarWords += " dollar";
    else dollarWords += " dollars";

    // Convert the cent part
    string centWords;
    if (!centPart.empty()) {
        int centNum = stoi(centPart);
        if (centNum > 0) {
            centWords = " and " + numberToWords(centNum);
            if (centNum == 1) centWords += " cent";
            else centWords += " cents";
        }
    }

    return dollarWords + centWords;
}

// To execute C++, please define "int main()"

void validate(string input, string expectedOutput) {
    string actual = convertCurrency(input);
    if(!expectedOutput.compare(actual)) {
        cout << "SUCCESS" << endl;
    } else {
        cout << "FAILED\n\tExpected: " << expectedOutput << "\n\tActual: "<< actual << endl;
    }
}

int main() {
    // Do not modify the test cases
    validate("$0", "zero dollars");
    validate("$1", "one dollar");
    validate("$4", "four dollars");
    validate("$12.01", "twelve dollars and one cent");
    validate("$30", "thirty dollars");
    validate("$71", "seventy one dollars");
    validate("$56", "fifty six dollars");
    validate("$90.00", "ninety dollars");
    validate("$100", "one hundred dollars");
    validate("$217.84", "two hundred seventeen dollars and eighty four cents");
    validate("$320", "three hundred twenty dollars");
    validate("$350.21", "three hundred fifty dollars and twenty one cents");
    validate("$701.82", "seven hundred one dollars and eighty two cents");
    return 0;
}
Editor is loading...
Leave a Comment