【发布时间】:2019-05-14 12:17:03
【问题描述】:
我目前正在研究 cs50“现金”问题:估计支付一些零钱所需的硬币数量。
例如:欠款 0.41 美元 = 1 美分硬币、1 美分硬币、1 美分、1 便士。
但是,在估算所需硬币的数量时,我最终会失去几分钱,我认为这是由于我的错误,因为它似乎总是少了一两个硬币(便士)。
我已经包含了多个 printf 语句来尝试跟踪我可以做的事情,但我似乎无法弄清楚为什么该部门不起作用。
#include <cs50.h>
#include <stdio.h>
int main(void)
{
// change
float change = get_float("how much change is owed?: ");
int coins = 0;
//reprompt
while (change < 0)
{
change = get_float("how much change is owed?: ");
}
//quarter
float quarter = 0.25;
float quarters = change / quarter;
quarters = (int) quarters;
change = change - (quarters * quarter);
printf("%f quarters\n", quarters);
//dimes
float dime = 0.10;
float dimes = change / dime;
dimes = (int) dimes;
change = change - (dimes * dime);
printf("%f dimes\n", dimes);
//nickels
float nickel = 0.05;
float nickels = change / nickel;
nickels = (int) nickels;
change = change - (nickels * nickel);
printf("%f nickels\n", nickels);
printf("%f in change left change\n", change);
//pennies
float penny = 0.010000;
float pennies = change / penny;
pennies = (int) pennies;
change = change - (pennies * penny);
printf("%f pennies\n", pennies);
//coins
coins = quarters + dimes + nickels + pennies;
printf("%i\n", coins);
//printf("%f\n", change);
}
【问题讨论】:
-
你试过检查CS50吗?
-
是的,但是他们内置的帮助功能无法帮助我。
-
您可能遇到了这个问题:
(int)0.99999 == 0。浮点运算非常棘手。您可以通过仅使用整数运算来解决它(以便士为基本单位)。 -
我建议不要使用
float来完成这项任务。只需使用int来跟踪便士的数量。所以一角钱不会是0.1,而是10,等等。 -
您的
printf语句未能显示正确的值。%f将值四舍五入到小数点后六位。要显示完整的值%.99g对于这些情况就足够了,如果您的 C 实现格式正确,%a将使用十六进制浮点格式显示确切的值。
标签: c floating-point int division cs50