读取一个带有两个小数位的浮点数,这代表货币价值。
在此之后,将该值分解为多种钞票与硬币的和,每种面值的钞票和硬币使用数量不限,要求使用的钞票和硬币的数量尽可能少。
钞票的面值是100,50,20,10,5,2。
硬币的面值是1,0.50,0.25,0.10,0.05和0.01。
输入格式
输入一个浮点数N。
输出格式
参照输出样例,输出每种面值的钞票和硬币的需求数量。
数据范围
0≤N≤1000000.00
输入样例:
576.73
输出样例:
NOTAS:
5 nota(s) de R 50.00
1 nota(s) de R 10.00
1 nota(s) de R 2.00
MOEDAS:
1 moeda(s) de R 0.50
0 moeda(s) de R 0.10
0 moeda(s) de R 0.01
#include<iostream> #include<cstdio> using namespace std; int main() { double n; cin>>n; int a,b,c,d,e,f; int aa,bb,cc,dd,ee,ff; a=(int)n/100; b=(int)n%100/50; c=(int)n%100%50/20; d=(int)n%100%50%20/10; e=(int)n%100%50%20%10/5; f=(int)n%100%50%20%10%5/2; cout<<"NOTAS:"<<endl; cout<<a<<" nota(s) de R$ 100.00"<<endl; cout<<b<<" nota(s) de R$ 50.00"<<endl; cout<<c<<" nota(s) de R$ 20.00"<<endl; cout<<d<<" nota(s) de R$ 10.00"<<endl; cout<<e<<" nota(s) de R$ 5.00"<<endl; cout<<f<<" nota(s) de R$ 2.00"<<endl; float re; re=(n-(a*100.00+b*50.00+c*20.00+d*10.00+e*5.00+f*2.00))*100.00; aa=(int)re/100; bb=(int)re%100/50; cc=(int)re%100%50/25; dd=(int)re%100%50%25/10; ee=(int)re%100%50%25%10/5; ff=(int)re%100%50%25%10%5/1; cout<<"MOEDAS:"<<endl; cout<<aa<<" moeda(s) de R$ 1.00"<<endl; cout<<bb<<" moeda(s) de R$ 0.50"<<endl; cout<<cc<<" moeda(s) de R$ 0.25"<<endl; cout<<dd<<" moeda(s) de R$ 0.10"<<endl; cout<<ee<<" moeda(s) de R$ 0.05"<<endl; cout<<ff<<" moeda(s) de R$ 0.01"<<endl; return 0; }
前面一个double后面一个float直接AC;
不知道精度哪里出问题了
莫非 double 0.000000
float 0.000001
不解 纯属运气碰对了,测试样点少,所以随缘蒙对,不可取!!
re double 不满足 463.01
n float 不满足 576.73
既然是两位小数,我直接可以把n*100处理成int型直观计算
以下是代码
#include<iostream> #include<cstdio> using namespace std; int main() { double n; cin>>n; int m=n*100; int a,b,c,d,e,f; int aa,bb,cc,dd,ee,ff; a=(int)m/10000; b=(int)m%10000/5000; c=(int)m%10000%5000/2000; d=(int)m%10000%5000%2000/1000; e=(int)m%10000%5000%2000%1000/500; f=(int)m%10000%5000%2000%1000%500/200; cout<<"NOTAS:"<<endl; cout<<a<<" nota(s) de R$ 100.00"<<endl; cout<<b<<" nota(s) de R$ 50.00"<<endl; cout<<c<<" nota(s) de R$ 20.00"<<endl; cout<<d<<" nota(s) de R$ 10.00"<<endl; cout<<e<<" nota(s) de R$ 5.00"<<endl; cout<<f<<" nota(s) de R$ 2.00"<<endl; int re; re=m-(a*10000+b*5000+c*2000+d*1000+e*500+f*200); aa=(int)re/100; bb=(int)re%100/50; cc=(int)re%100%50/25; dd=(int)re%100%50%25/10; ee=(int)re%100%50%25%10/5; ff=(int)re%100%50%25%10%5/1; cout<<"MOEDAS:"<<endl; cout<<aa<<" moeda(s) de R$ 1.00"<<endl; cout<<bb<<" moeda(s) de R$ 0.50"<<endl; cout<<cc<<" moeda(s) de R$ 0.25"<<endl; cout<<dd<<" moeda(s) de R$ 0.10"<<endl; cout<<ee<<" moeda(s) de R$ 0.05"<<endl; cout<<ff<<" moeda(s) de R$ 0.01"<<endl; return 0; }
但是感觉好多重复计算,想用数组预处理一部分数据
用几个循环应该可以解决 这里只提供思路不提供代码了!
只是一些细节处理问题