cs50 pset1 cash:for 循环为某些值产生错误

cs50 pset1 cash: for loop producing errors for some values

我希望程序为用户提供找零所需的最少硬币数量,但我的循环并不总是提供正确的答案(值 0.41、0.75,...)。我知道“while”循环会是更好的解决方案,但是有人能告诉我那些“for”循环有什么问题吗?谢谢

float change;
do
{
    change = get_float("Change owed:$ ");
}
while (change < 0);

int cents = round(change * 100);

int coins = 0;

for (int quarters = cents; quarters >= 25; quarters -= 25)
{
    coins++;
}

for (int dimes = cents % 25; dimes >= 10; dimes -= 10)
{
    coins++;
}

for (int nickels = cents % 10; nickels >= 5; nickels -= 5)
{
    coins++;
}

for (int pennies = cents % 5; pennies >= 1; pennies -= 1)
{
    coins++;
}

printf("%i\n", coins);

}

镍币(和便士)的起点是错误的。对于 .41 示例:

季度循环从 41
开始 dimes 循环从 41 % 25 = 16
开始 nickles 循环从 41 % 10 = 1

开始

这是个问题。