题目描述
读取一个带有两个小数位的浮点数,这代表货币价值
在此之后,将该值分解为多种钞票与硬币的和,每种面值的钞票和硬币使用数量不限,要求使用的钞票和硬币的总数量尽可能少。
钞票的面值是 100,50,20,10,5,2。
硬币的面值是 1,0.50,0.25,0.10,0.05和0.01。
经过实验证明:在本题中,优先使用面额大的钞票和硬币可以保证所用的钞票和硬币总数量最少。
c++中,double 1可能不是1,而是一个很接近1的数,在进行强制类型转换时,应该将其变成1,可以通过round函数,进行四舍五入,再进行强制转换,就不会变成0
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double n;
cin>>n;
int money=(int)n;
int hund,fif,twe,ten,five,two,one;
hund=money/100;
fif=money%100/50;
twe=money%100%50/20;
ten=money%100%50%20/10;
five=money%100%50%20%10/5;
two=money%100%50%20%10%5/2;
one=money%100%50%20%10%5%2;
cout<<"NOTAS:\n";
cout<<hund<<" nota(s) de R$ 100.00\n";
cout<<fif<<" nota(s) de R$ 50.00\n";
cout<<twe<<" nota(s) de R$ 20.00\n";
cout<<ten<<" nota(s) de R$ 10.00\n";
cout<<five<<" nota(s) de R$ 5.00\n";
cout<<two<<" nota(s) de R$ 2.00\n";
cout<<"MOEDAS:\n";
int a,b,c,d,e;
int cent=round((n-money)*100);
a=cent/50;
b=cent%50/25;
c=cent%50%25/10;
d=cent%50%25%10/5;
e=cent%50%25%10%5;
cout<<one<<" moeda(s) de R$ 1.00\n";
cout<<a<<" moeda(s) de R$ 0.50\n";
cout<<b<<" moeda(s) de R$ 0.25\n";
cout<<c<<" moeda(s) de R$ 0.10\n";
cout<<d<<" moeda(s) de R$ 0.05\n";
cout<<e<<" moeda(s) de R$ 0.01";
return 0;
}