我正在编写程序,以计算给定的找零数量下的找零硬币的最大数量。我将所需的零钱作为正浮点数,然后乘以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)


经过计算。

10-08 01:54