【发布时间】:2012-10-29 19:50:01
【问题描述】:
我不明白为什么这对 90% 的输入有效,而对其他输入无效。它的目的是告诉你有多少硬币可以换回来。大多数测试金额都可以正常工作,但如果您输入 4.20(或 4.20 美元),它会返回 23 个硬币……应该是 18 个硬币(16 个硬币和 2 个镍币)。错误在哪里?这是我的代码:
#include <stdio.h>
#include <cs50.h>
int main(void){
float change = 0.00;
printf("How much change is owed? ");
change = GetFloat();
float quarters = change/.25;
change-= (int)quarters*.25;
float dimes = change/.10;
change-= (int)dimes*.10;
float nickels = change/.05;
change-= (int)nickels*.05;
float pennies = (change+.005)/.01;
change-=(int)pennies*.01;
int total = (int)quarters+(int)dimes+(int)nickels+(int)pennies;
printf("%d\n", total);
return 0;
}
【问题讨论】:
-
你不应该首先使用浮点数来表示金钱。
-
既然一切都是 1 美分的倍数,为什么不将一切都存储为整数美分呢?这样您就可以避免所有与浮点相关的麻烦。
-
这是一个家庭作业,应该教授浮点功能,这是它按原样编写的唯一原因。奇怪的是大多数输入都可以正常工作,只有某些数字不能。我不能用不同的类或任何东西重写它,因为这是教授希望看到的方式。
-
一切都不是 1 美分的倍数
-
@kallikak 在问题中命名一个不是...的货币值?
标签: c floating-point cs50