通过两个输入计算纸币和硬币的找零

时间:2019-09-21 07:32:15

标签: c math precision integer-arithmetic

我有一个学校作业,要在提供两个输入后计算出纸币和硬币的找零,这两个是项目的成本和所付的钱。在说明中,有一个提到的测试用例

  

请提供一个测试案例,其中美元数如果乘以100.0并转换为int而没有添加少量金额,则将仅少于正确的便士整数。

我不确定当它说的只是几分钱的正确整数时,它到底需要什么。 如果有人可以解释,那将非常有帮助。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
  double dcost, dtendered;
  int    icost, itendered;
  int    itwenties, itens, ifives, iones, iquarters, idimes, inickels, ipennies;
  /* add any additional variables between here -> */
  int itotal;
  /* <- and here*/

  scanf("%lf", &dcost);
  scanf("%lf", &dtendered);

  icost     = (int)((dcost * 100.0) + 0.000001);
  itendered = (int)((dtendered * 100.0) + 0.000001);

  /* add code to calculate itwenties, itens, etc., between here -> */
  itotal    = itendered - icost;
  itwenties = itotal / 2000;
  itotal    = itotal % 2000;
  itens     = itotal / 1000;
  itotal    = itotal % 1000;
  ifives    = itotal / 500;
  itotal    = itotal % 500;
  iones     = itotal / 100;
  itotal    = itotal % 100;
  iquarters = itotal / 25;
  itotal    = itotal % 25;
  idimes    = itotal / 10;
  itotal    = itotal % 10;
  inickels  = itotal / 5;
  itotal    = itotal % 5;
  ipennies  = itotal;

  /* <- and here */

  printf("%2d twenties\n", itwenties);
  printf("%2d tens\n", itens);
  printf("%2d fives\n", ifives);
  printf("%2d ones\n", iones);
  printf("%2d quarters\n", iquarters);
  printf("%2d dimes\n", idimes);
  printf("%2d nickels\n", inickels);
  printf("%2d pennies\n", ipennies);

  while (1)
    getchar();
  return 0;
}      

在23、24行中,我添加了少量

编辑:我将此作业的说明附在此链接上 请看一次。 https://docs.google.com/document/d/1RolSvpg5Purn4_IrhG1cbrrcSwHjYvnDcIZQ3uoQM8U/edit?usp=sharing

2 个答案:

答案 0 :(得分:1)

提示提示您找到一整美元的数量,如果不使用+ 0.000001进行转换,则导致少一美元,外加99美分。
即您可能应该了解计算机上浮点数学的不精确问题。

您不需要在程序中执行此操作,相反,您应该正确进行转换。

但是,您应该拥有一个测试用例,可以检测代码是否未能使用少量代码进行正确的转换。

这意味着,如果您提交基本正确的程序,则将以这样的金额进行测试。如果该测试(否则可能被认为是极端情况)失败了,那么您不仅犯了小错,而且还没有努力明确声明要求。
我想那将意味着对您的成绩有更大的惩罚...

答案 1 :(得分:0)

我认为系统要求您测试itendered < icost时发生的情况。也许请您的老师澄清一下!

您能解释+ 0.000001)背后的逻辑吗?您知道如何将浮点数转换为整数吗?什么是截断?

您知道为什么不应将货币表示为浮动货币吗? (您看过Office Space吗?《超人2》吗?)