计算给定零钱金额的硬币面额的程序
Program that will calculate denominations of coins of a given amount of change
我应该创建一个(一个函数)程序,计算给定零钱量的硬币面额。
不知怎的,我没有正确显示一角硬币/四分之一硬币等的数量,它只给了我00000。我做错了什么?
这是我的代码:
#include <iostream>
using namespace std;
const int DOLLAR = 100;
const int QUARTER = 25;
const int DIME = 10;
const int NICKEL = 5;
const int PENNY = 1;
void getChange (double &money, int &value);
int change(double &money, int value);
int main()
{
double money;
int value;
getChange (money, value);
int numDollar = change(money, DOLLAR);
int numQuarter = change(money, QUARTER);
int numDime = change(money, DIME);
int numNickel = change(money, NICKEL);
int numPenny = change(money, PENNY);
cout << numDollar << endl;
cout << numQuarter <<endl;
cout << numDime <<endl;
cout << numNickel <<endl;
cout << numPenny <<endl;
cout << value <<endl;
}
void getChange (double &money, int &value)
{
cin >> money;
value = static_cast<double>(money) * 100;
}
int change(double &money, int value)
{
int numDollar, numQuarter, numDime, numNickel, numPenny;
while(value>100)
numDollar = value / DOLLAR;
money = value - (numDollar*DOLLAR);
numQuarter = money / QUARTER;
money = money - (numQuarter*QUARTER);
numDime = money / DIME;
money = money - (numDime*DIME);
numNickel = money / NICKEL;
money = money - (numNickel*NICKEL);
numPenny = money / PENNY;
money = money - (numPenny*PENNY);
return money;
}
尝试遍历程序,您会注意到change()
总是返回0
,因此输出是正确的,但函数显然不是。
想想这个函数返回了什么以及它应该返回什么。还要记住,您正在传递一个引用,所以无论您在change()
中对money
做什么,即使在函数的作用域之外也会持续存在。
由于您希望change()
返回硬币数量,因此您很可能希望它返回金额除以当前硬币的价值。
除非你真的被卡住了,否则不要读过这一行,但即使这样,也要先自己想清楚 如果你做不到,请一步一步地阅读,然后再考虑一遍,等等。
让我们快速了解一下change()
:的实现
while(value>100)
numDollar = value / DOLLAR;
这在这里没有多大意义。value
将持有当前硬币的价值,但你不知何故试图用它进行一些计算。由于value
在这个循环中不会改变,所以你基本上创建了一个无限循环。没有输入,因为value
现在从未大于100
(因为DOLLAR
(100
)是传递的最大值)。
numQuarter=货币/季度;money=货币-(numQuarter*QUARTER);
这将正确计算四分之一的数量并计算余数。然而,这不是你在这里应该做的,因为实际的硬币value
是由参数决定的。
最后,但同样重要的是,您已经收到了您的退货声明:
return money;
如果一切都按预期进行(假设当前的实现是预期的;即计算所有硬币计数),那么现在的钱应该是0
,然后返回。
"编程"的很大一部分实际上是能够接受一些想法,然后将其转化为某种代码结构。这并不是要了解某些命名空间或头文件中所有可能的函数(您可以随时查找这些函数)。这是关于能够写下概念和想法并理解它们,如果是别人写的。如果你愿意,可以使用下面的代码来获得灵感,但除非你真正理解每一行的作用,否则不要继续。
这是我快速而肮脏的解决方案。没有错误处理等等,但它似乎工作正常:
#include <iostream>
const unsigned int DOLLAR = 100;
const unsigned int QUARTER = 25;
const unsigned int DIME = 10;
const unsigned int NICKEL = 5;
const unsigned int PENNY = 1;
unsigned int change(unsigned int &money, unsigned int coin);
int main(int argc, char **argv) {
double input;
// Retrieve the amount of money from the user.
std::cout << "Enter the amount in USD: ";
std::cin >> input;
// Now convert it into cents for processing.
unsigned int money = input * 100;
// And now count and output the number of coins:
std::cout << "You'll get:n";
std::cout << "t" << change(money, DOLLAR) << " dollar(s)n";
std::cout << "t" << change(money, QUARTER) << " quarter(s)n";
std::cout << "t" << change(money, DIME) << " dime(s)n";
std::cout << "t" << change(money, NICKEL) << " nickel(s)n";
std::cout << "t" << change(money, PENNY) << " penny(s)" << std::endl;
return 0;
}
unsigned int change(unsigned int &money, unsigned int coin) {
// First count the number of coins that fit into the amount.
// Since we're doing integer division, all results will be rounded down.
const unsigned int count = money / coin;
// Then calculate the remainder and update it.
// The modulo operator (%) always returns the integer remainder.
money %= coin;
// Return the number of coins of this size
return count;
}
- 最小硬币更换问题(自上而下方法)
- 如何在硬币兑换问题中找到硬币的数量
- 硬币兑换:找到多种方法来重现给定的总和
- 对于使用高级服务的分钟数和应付金额,我不断得到相同的数字
- 在 c++ 中模拟抛硬币时,模数如何工作?
- 用给定面值的最小硬币数量计价金额.贪婪的问题
- 抛硬币计数游戏C++数据结构!.
- 如何在硬币兑换中添加记忆
- 当计算所有价格C++时,总金额被搞砸了
- 使用OpenCV计数硬币
- 如何让我的输出显示输入金额的星号
- 允许用户输入带或不带美元符号的金额
- 如何缩短此C++代码?(硬币兑换计算器)
- C++ 返回具有最小硬币的数组/向量以获得价值动态规划
- 位操纵:更难掷硬币
- 如何将钱分成不同的金额
- 调试有偏差的硬币掷转 (C++)
- 如何在假硬币算法中称重
- 硬币或CBC求解器性能:命令行实用程序与编译的C 程序
- 计算给定零钱金额的硬币面额的程序