读书人

关于小数的有关问题

发布时间: 2013-07-16 22:38:05 作者: rapoo

关于小数的问题
题目:从键盘输入一指定金额(以元为单位,如345.78),然后显示支付该金额的各种面额人民币数量,要求显示100元、50元、10元、5元、2元、1元、5角、1角、5分、1分各多少张。 (输出面额最大值:比如345.78=100*3+10*4+5*1+0.5*1+0.1*2+0.01*8)

#include "stdafx.h"
#include "stdio.h"

void compute(float Num)
{
float S=Num;
float unit[10]={100,50,10,5,2,1,0.5,0.1,0.05,0.01};
int a[10];
int i,j;

for(i=0;i<10;i++)
{
a[i]=0;
}

for(i=0,j=0;i<10;i++)
{
a[i]=S/unit[i];
S-=unit[i]*a[i];
j+=a[i];
if(S==0)
{
break;
}
}

printf("%.2f=",Num);

for(i=0;i<10;i++)
{
if(a[i]!=0)
{
if(unit[i]>=1)
{
printf("%.0f*%d",unit[i],a[i]);
}
else if(unit[i]<1&&unit[i]>0.05)
{
printf("%.1f*%d",unit[i],a[i]);
}
else
{
printf("%.2f*%d",unit[i],a[i]);
}
j-=a[i];
if(j!=0)
{
printf(" + ");
}
}
}

printf("\n");

return;
}

int main(int argc, char* argv[])
{
float Num;
int rtval;
while(1)
{
printf("Please input the money:\n");
rtval=scanf("%f",&Num);
if(rtval!=1)
{
getchar();
printf("Input error,please input again!\n");
continue;
}
compute(Num);
}
return 0;
}


输入12.4
输出为:12.40=10*1 + 2*1 + 0.1*3 + 0.1*1 + 0.01*4
我想着实在不行处理小数部分的时候先乘个10进化成整数再处理。 小数
[解决办法]
引用:
我想着实在不行处理小数部分的时候先乘个10进化成整数再处理。


这就是定点数的思想.
[解决办法]
引用:
我想着实在不行处理小数部分的时候先乘个10进化成整数再处理。


就是这么来
[解决办法]
以分为单位处理,就全是整数了

浮点数有误差,不能直接这么算

读书人网 >C++

热点推荐