繁体   English   中英

有没有办法为 CS50 现金问题集 1 运行以下代码

[英]Is there a way to run the following code for CS50 Cash problem set 1

我是 CS 和编程的新手,正在尝试为 cs cash 问题集 1 编写代码。我认为这不是预期的解决方案,我知道这不是干净简洁的代码,但在这个point I'm just trying to make it run.I was wondering if the code I wrote was complete 胡言乱语或者它是否真的可以工作,因为它在理论上对我来说真的很有意义。

  #include<stdio.h>
#include<cs50.h>
#include<math.h>
int main(void)
{
    float change;
    do
    {
     change= get_float("Enter change here\n");
    }
     while(change<0);
    int quarter=floor(change/0.25);
    int dime=floor((change-(quarter*0.25))/0.10);
    int nickel=floor((change-(quarter*0.25)-(dime*0.10))/0.05);
     int penny=round((change-(quarter*0.25)-(dime*0.10)-(nickel*0.05))/0.01);
    int sum =quarter+nickel+dime+penny;
    printf("%i",sum);
   
     
}

        

这是许多初学者都遇到的一个常见问题,即浮点数的不精确性。 在对浮点数和双精度数进行运算时,结果值可能会相差一个小数点。 您可以在这篇 SO 帖子上了解更多信息: 为什么浮点数不准确? .

无论如何,您的程序涉及 float division 和 integer truncation ,它们通常不能很好地协同工作。 在 $4.20 作为输入的示例中,在 quarters 设置为 16 之后,在计算 dimes 时,(4.2 - 0.25 x 16) / 0.10 实际上保存为 1.999998,而不是 2。然后将其截断(因为 dime 是一个整数)并保存为 1,这解释了您的程序为您提供的不准确输出。 一个解决方案是将所有内容乘以 100,使用 integer 除法以避免不精确。 所以上面的例子会变成 (420 - 25 x 16) / 10,它会在你的 dime int 中正确地保存为 2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM