我正在编写程序,以计算给定的找零数量下的找零硬币的最大数量。我将所需的零钱作为正浮点数,然后乘以100将其转换为整数,从而使金额为几美分。经过测试,某些值有效,而其他值(如4.2)则无效,给出的答案应为22(应为18)。我无法弄清原因。可以请一些帮助。
int main (void)
{
float change;
do
{
printf("How much change do you want?\n");
change = get_float();
} while (change < 0);
int change1 = change * 100;
int coins = 0;
while (change1 != 0)
{
if (change1 >= 25)
{
change1 -= 25;
coins++;
}
else if (change1 >= 10)
{
change1 -= 10;
coins++;
}
else if (change1 >= 5)
{
change1 -= 5;
coins++;
}
else if (change1 >= 1)
{
change1 -= 1;
coins++;
}
}
//Print change
printf("%i\n", coins);
}
最佳答案
舍入错误:
机器存储4.2时,它并不完全是4.2。因此,当乘以100时,它将变为419.99999 ...,它将转换为int419。解决此问题的方法是:
int change1 = change * 100 + 0.5;
这也可以通过检查
printf("%i\n", change1)
经过计算。