问题:
给予改变。实施一个程序,指导收银员如何给予 更改。该计划有两个输入:到期金额和金额 收到客户。显示美元,季度,角钱, 客户应该收到的镍和硬币。
到目前为止我有什么:
#include <iostream>
using namespace std;
int main()
{
double amount_due;
double amount_recieved;
cout << "Enter amount due: " << endl;
cin >> amount_due;
cout << "Enter amount received: ";
cin >> amount_recieved;
int change = amount_recieved - amount_due;
int dollar = 100;
int quarters = 25;
int dimes = 10;
int nickels = 5;
int pennies = 1;
//Return change in full dollars
cout << "dollars: " << change % 100 << endl;
//Return change in quarters
cout << "quarters: " << (change % 100) % 25 << endl;
//Return change in dimes
cout << "dimes: " << ((change % 100) % 25) % 10 << endl;
// Return change in nickels
cout << "nickels: " << (((change % 100) % 25) % 10) % 5 << endl;
//Return change in pennies
cout << "pennies: " << ((((change % 100) % 25) % 10) % 5) % 1 << endl;
system("pause");
return 0;
}
我意识到还有其他一些问题得到了解答,但它们可能会在我的代码中使用,我做错了什么?
答案 0 :(得分:1)
你想做的就像收银员一样。
首先确保将更改表示为整个便士。
然后提供足够的美元直到剩余的变化小于1美元。然后继续前进到宿舍,然后是硬币,镍币和硬币。
因此对于美元案例,伪代码将是:
dollars = change / 100 # get integral number of dollars
change = change % 100 # and reduce change-left-to-go accordingly
print dollars, " dollars"
将该逻辑应用于其他硬币类型以减少价值的顺序应该是一件简单的事情。
答案 1 :(得分:0)
有几个问题。第一个是您要求用户输入值,但不指定它们是什么。如果用户输入的数字不是便士,那么您将无法获得预期的价值。我希望这个输入应该是美元。首先,将change
更改为:
change = int((amount_recieved - amount_due) * 100.0)
下一步:
cout << "dollars: " << change % 100 << end;
将剩下的换算除以100,这不是你想要的。您只想将美元除以100.您还希望修改更改以阻止您重复此数学运算。
dollars = change / 100;
cout << "dollars: " << dollars << endl;
change -= dollars*100;
从那里开始,代码的其余部分应按预期工作减去% 100
部分。正如其他人在对问题的评论中提到的那样,你的问题是因为没有先考虑数学,而不是从C ++做任何本质上的错误。这会在任何语言中产生错误的结果,包括将其写成黑板上的数学。
答案 2 :(得分:0)
正如其他人所提到的那样,你没有采取必要的步骤来实现这一点,这就是重复减法。是的,你从给定的金额中减去了价格,并确定了要给的美元,但你没有减去这些美元,给你一个新的总数来确定多少个季度。
这样的事情(假设你在便士工作):
change_left = customer_payment - original_cost;
//...
number of dollars = change_left / 100;
change_left = change_left - (100 * number of dollars); <-- where is this?
现在你如何确定季度?您有一个名为change_left的“运行总计”,它会因您当前为客户所做的更改而减少。你重复类似的步骤来得到宿舍的数量,然后是硬币数,镍币数等,即除以25,然后减去给出新的“change_left”的季度数。然后重复10得到硬币,5得到镍的数量等。
同样,问题不在于C ++ - 问题在于你并没有把它想象成一系列导致最终目标的离散步骤。
答案 3 :(得分:0)
#include <iostream>
using namespace std;
int main() {
double amount_due;
double amount_recieved;
cout << "Enter amount due: " << endl;
cin >> amount_due;
cout << "Enter amount received: ";
cin >> amount_recieved;
int change = amount_recieved - amount_due;
int dollar = 100;
int quarters = 25;
int dimes = 10;
int nickels = 5;
int pennies = 1;
//Return change in full dollars
cout << "dollars: " << change / 100 << endl;
//Return change in quarters
cout << "quarters: " << (change % 100) / 25 << endl;
//Return change in dimes
cout << "dimes: " << ((change % 100) % 25) / 10 << endl;
// Return change in nickels
cout << "nickels: " << (((change % 100) % 25) % 10) / 5 << endl;
//Return change in pennies
cout << "pennies: " << ((((change % 100) % 25) % 10) % 5) / 1 << endl;
return 0;
}