C++ 代码
#include<bits/stdc++.h>
#include<cstdio>
using namespace std;
int a[6] = {100,50,20,10,5,2};
double b[6] = {1,0.50,0.25,0.10,0.05,0.01};
int main(){
int n1, n2, cnt, interFirst, interLast;
double n;
cin >> n;
//只取整数部分,放到n1
n1 = n;
//本题应分为2部分进行处理
//第1部分开始
printf("NOTAS:\n");
interFirst = n1;
//循环6次,分别处理100,50,20,10,5,2
for(int i = 0; i < 6; i++){
//第一次循环中,先求100需要用几张,放到cnt里
cnt = interFirst / a[i];
//把用100块钞票能解决的部分都减去
interFirst -= cnt * a[i];
//打印需要用几张钞票
printf("%d nota(s) de R$ %d.00\n", cnt, a[i]);
}
//第2部分开始
printf("MOEDAS:\n");
//解释一下下面那行代码,假如n是156.03
//这个部分相当于把整数部分去掉,把小数点部分乘100转化为整数:n*100 - int(n)*100
//156.03 * 100 - 156 * 100 得出结果是3
//但是还不够,156算完几张5块以后,剩下1块,不能算2块的了,这个1不能扔掉,要加上
//156进行:int(156.03)%5%2 算出1 最后再乘以100即可
n2 = n*100 - int(n)*100 + int(n)%5%2*100;
interLast = n2;
//如果最开始的输入为463.01,最后的0.01硬币会是0个
//0.1,可能只是0.009999999
//而0.009999999/0.01只会得0
for(int i = 0; i < 6; i++){
cnt = interLast / (b[i] * 100);
interLast -= cnt * (b[i] * 100);
printf("%d moeda(s) de R$ %.2lf\n", cnt, b[i]);
}
return 0;
}