贪婪算法找钱问题中由浮点数产生的问题及初步解决方法
2012-04-06 15:27
465 查看
问题描述:用最少的零钞找开给出的一个人民币数值。假设人民币共有以下几种面值(元):100,50,10,5,2,1,0.5,0.2,0.1
我自己写的代码如下:
但是在运行过程中,我发现当我输入的是56.3元时,它的结果是错误的:
![](http://my.csdn.net/uploads/201204/06/1333697208_6461.jpg)
如上图,少了一毛钱,但是当我输入的是0.3元时,却不会出错:
![](http://my.csdn.net/uploads/201204/06/1333697232_9218.jpg)
于是我开始进行调试,发现问题的出现是因为输入的56.3在计算机被表示成了如下的数值:
![](http://my.csdn.net/uploads/201204/06/1333697268_6123.jpg)
这就是为什么最后会少了一毛钱,但是当输入为0.3时,情况就不一样了:
![](http://my.csdn.net/uploads/201204/06/1333697280_6395.jpg)
这就是为什么同样的问题却的出了不一样的答案,为了解决这个问题,我就在上面程序的第9行前加了一句:
sum = sum +0.05;
这样一来,56.3就为成为:
![](http://my.csdn.net/uploads/201204/06/1333697324_6520.jpg)
于是就可以得出正确的结果:
我自己写的代码如下:
#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元时,它的结果是错误的:
![](http://my.csdn.net/uploads/201204/06/1333697208_6461.jpg)
如上图,少了一毛钱,但是当我输入的是0.3元时,却不会出错:
![](http://my.csdn.net/uploads/201204/06/1333697232_9218.jpg)
于是我开始进行调试,发现问题的出现是因为输入的56.3在计算机被表示成了如下的数值:
![](http://my.csdn.net/uploads/201204/06/1333697268_6123.jpg)
这就是为什么最后会少了一毛钱,但是当输入为0.3时,情况就不一样了:
![](http://my.csdn.net/uploads/201204/06/1333697280_6395.jpg)
这就是为什么同样的问题却的出了不一样的答案,为了解决这个问题,我就在上面程序的第9行前加了一句:
sum = sum +0.05;
这样一来,56.3就为成为:
![](http://my.csdn.net/uploads/201204/06/1333697324_6520.jpg)
于是就可以得出正确的结果:
![](http://my.csdn.net/uploads/201204/06/1333697336_5292.jpg)
相关文章推荐
- 移动端点击(click)事件延迟问题的产生与解决方法
- 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释
- 双系统还原点丢失问题的产生与解决方法介绍
- 使用ld的“-Ttext”选项时可能产生的一个问题的解决方法
- 获取DataGridView绑定BindingSource的数据表,并根据树控件点击进行筛选数据表,下拉控件自定义排序问题初步解决方法,解决了该行属于另一个表的错误提示.
- hibernate 使用延迟加载产生的问题以及对应的解决方法
- 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释
- mysql c++ connector 1.0.5 getString方法 使用过程中遇到汉字产生的乱码问题的解决方法
- Jmeter 多台机器产生负载及问题解决方法
- “人民币找零”问题的贪婪法解决算法
- “装箱”问题的贪婪法解决算法
- 移植linux2.6.38产生的问题及其解决方法
- Connection is read-only问题的产生原因与解决方法
- Java中浮点数精度问题的解决方法
- liferay-tomcat注册服务的方法和之后产生的乱码问题的解决办法
- ssh中Connection is read-only问题的产生原因与解决方法
- “装箱”问题的贪婪法解决算法
- “人民币找零”问题的贪婪法解决算法
- “马的遍历”问题的贪婪法解决算法
- c#字符串转datatime时,因操作系统不一致产生的问题解决方法