方法一:非放大法
注意:
关于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;
}