读取一个带有两个小数位的浮点数,这代表货币价值。
在此之后,将该值分解为多种钞票与硬币的和,每种面值的钞票和硬币使用数量不限,要求使用的钞票和硬币的数量尽可能少。
钞票的面值是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;
}但是感觉好多重复计算,想用数组预处理一部分数据
用几个循环应该可以解决 这里只提供思路不提供代码了!
只是一些细节处理问题



京公网安备 11010502036488号