acwing656. 钞票和硬币

 方法一:非放大法

注意:

关于double精度问题。 

  

#include <iostream>
#include <cstdio>
using namespace std;


int main()
{
    double a[6]={100.00,50.00,20.00,10.00,5.00,2.00};
    double b[6]={1,0.50,0.25,0.10,0.05,0.01};
    double m;
    cin>>m;
    printf("NOTAS:\n");
    for(int i=0;i<6;i++){
        int t=int(m/a[i]);
        printf("%d nota(s) de R$ %.2lf\n",t,a[i]);
        m-=t*a[i];
    }
    printf("MOEDAS:\n");
    for(int i=0;i<6;i++){
        int t=int(m/b[i]+10e-3);
        printf("%d moeda(s) de R$ %.2lf\n",t,b[i]);
        m-=t*b[i];
    }
    return 0;
}

方法二:放大法

直接都*100,变成整数来做。

注意:在输出小数时需要转换为double后才能输出,整数除整数是0,小数除小数才是小数。

#include <iostream>
#include <cstdio>
using namespace std;


int main()
{
    int a[12]={10000, 5000, 2000, 1000, 500, 200, 100, 50, 25, 10, 5, 1};
    double m;
    cin>>m;
    printf("NOTAS:\n");
    m*=100;
    for(int i=0;i<6;i++){
        int t=m/a[i];
        printf("%d nota(s) de R$ %.2lf\n",t,double(a[i]/100));
        m-=t*a[i];
    }
    printf("MOEDAS:\n");
    for(int i=6;i<12;i++){
        int t=m/a[i];
        printf("%d moeda(s) de R$ %.2lf\n",t,a[i]*1.0/100.0);
        m-=t*a[i];
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45662399/article/details/127983426