您的位置:首页 > 其它

贪婪算法找钱问题中由浮点数产生的问题及初步解决方法

2012-04-06 15:27 465 查看
问题描述:用最少的零钞找开给出的一个人民币数值。假设人民币共有以下几种面值(元):100,50,10,5,2,1,0.5,0.2,0.1

我自己写的代码如下:

#include <stdio.h>
int main()
{
int value[10] = {0,10,20,50,100,200,500,1000,5000,10000};
int count[10]={0};
printf("please input the money:\n");
float sum;
scanf("%f",&sum);
int s = (int)(sum*100);
for(int i = 9; i>=1; i--)
{
count[i] = 0;
for( ; ; )
{
if(s>=value[i])
{
count[i]++;
s = s - value[i];
}
else
break;
}
printf("%d\t%.2f\n",count[i],((float)value[i])/100);
if(s < 0) break;
}
}

但是在运行过程中,我发现当我输入的是56.3元时,它的结果是错误的:



如上图,少了一毛钱,但是当我输入的是0.3元时,却不会出错:





于是我开始进行调试,发现问题的出现是因为输入的56.3在计算机被表示成了如下的数值:



这就是为什么最后会少了一毛钱,但是当输入为0.3时,情况就不一样了:



这就是为什么同样的问题却的出了不一样的答案,为了解决这个问题,我就在上面程序的第9行前加了一句:

sum = sum +0.05;

这样一来,56.3就为成为:



于是就可以得出正确的结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐