读取一个带有两个小数位的浮点数,这代表货币价值。

在此之后,将该值分解为多种钞票与硬币的和,每种面值的钞票和硬币使用数量不限,要求使用的钞票和硬币的数量尽可能少。

钞票的面值是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;
}

但是感觉好多重复计算,想用数组预处理一部分数据
用几个循环应该可以解决 这里只提供思路不提供代码了!
只是一些细节处理问题