首页 > 解决方案 > 在杂货店做出改变

问题描述

我是计算机科学的新手,目前正在学习 C++。

我们被分配到计算大量变化的任务。例如,我在杂货店的零钱是 37.37 美元。该程序的输出会告诉我每张钞票我能得到多少零钱(1 张 20 美元钞票、1 张 10 美元钞票、1 张 5 美元钞票、2 张 1 美元钞票、四分之一、一角钱和两便士) .

我已经想出了如何用以前任务中的硬币来做这件事,但现在这些都是整美元的事实让我碰壁了。

我试过除以钞票面额,但我无法弄清楚(我在开头注释掉了cout/cin语句,所以每次我测试程序时我都不必输入数字):

#include <iostream> 
using namespace std;

int main() {
    double price, change;
    int paymentQ, quarters, dimes, nickels, pennies,
        twentyDollar, fiftyDollar,
        fiveDollar, dollars, tenDollar, totalChange;


    //cout << "What is price? " << endl;
    //cin >> price
    //cout << "Please insert cash or select payment type: " << endl;
    //cin >> paymentQ;
    //change = (paymentQ - price);

    change = 37.37;

    dollars = static_cast<int>(change);
    fiveDollar = 
    tenDollar =
    twentyDollar =
    fiftyDollar = 
    {
        dollars = static_cast<int>(change);
        quarters = (((change - dollars) * 100) / 25);
        dimes = (((change - dollars) * 100) - (quarters * 25)) / 10;
        nickels = (((change - dollars) * 100) - (quarters * 25) - (dimes * 10)) / 5;
        pennies = (((change - dollars) * 100) - (quarters * 25) - (dimes * 10) - (nickels * 5) + .5);
    }

    cout << "\nYour change is\n " << twentyDollar << " Twenty Dollar bill/s " << endl
        << tenDollar << " Ten Dollar Bill/s" << endl <<
        fiveDollar << " Five Dollar Bill/s" << endl <<
        dollars << " One Dollar Bill/s" << endl <<
        quarters<< " Quarters "<< endl <<
        dimes<< " dimes " << endl <<
        nickels << " Nickels" << endl << 
        pennies << " pennies "<< endl << endl;

    return 0;
}

标签: c++

解决方案


您分配面额变量的方式都是错误的,甚至可能不应该编译。即使是这样,它也有很多重复性,而且总体上肯定不容易阅读。

尝试更多类似的东西:

#include <iostream> 
using namespace std;

int main() {
    double price, paymentQ, change;
    int quarters, dimes, nickels, pennies,
        fiftyDollars, twentyDollars, tenDollars, fiveDollars, oneDollars;

    //cout << "What is price? " << endl;
    //cin >> price
    //cout << "Please insert cash or select payment type: " << endl;
    //cin >> paymentQ;
    //change = (paymentQ - price);
    change = 37.37;

    // despite what cout shows, 37.37 is actually 37.369999999999997 and
    // so would become 3736 instead of 3737 when multiplied by 100 and
    // truncated as-is to an int, so it needs to be rounded up a little
    // bit to account for that (see https://stackoverflow.com/questions/149033/) ...
    pennies = (change * 100) + 0.1; // see https://ideone.com/wmlzlm for why this work...

    fiftyDollars = pennies / 5000; pennies %= 5000;
    twentyDollars = pennies / 2000; pennies %= 2000;
    tenDollars = pennies / 1000; pennies %= 1000;
    fiveDollars = pennies / 500; pennies %= 500;
    oneDollars = pennies / 100; pennies %= 100;
    quarters = pennies / 25; pennies %= 25;
    dimes = pennies / 10; pennies %= 10;
    nickels = pennies / 5; pennies %= 5;

    cout << "\nYour change is " << change << "\n"
        << twentyDollars << " Twenty Dollar Bill/s\n"
        << tenDollars << " Ten Dollar Bill/s\n"
        << fiveDollars << " Five Dollar Bill/s\n"
        << oneDollars << " One Dollar Bill/s\n"
        << quarters << " Quarter/s\n"
        << dimes << " Dime/s\n"
        << nickels << " Nickel/s\n"
        << pennies << " Penny/s\n"
        << endl;

    return 0;
}

输出:

你的零钱是 37.37
1 二十美元钞票/秒
1 十美元钞票/秒
1 五美元钞票/秒
2 一美元钞票/秒
1 季度/秒
1 毛钱/秒
0 镍/秒
2 便士/秒

现场演示


推荐阅读