Я делаю набор задач cs50 "Жадный". В основном спрашивают пользователя, сколько сдачи ему причитается, а затем выводят минимальное количество монет, которое может равняться введенной сумме. Он работает отлично, за исключением того, что когда я ввожу 4.2, он выводит 22, когда должен выводить 18.
#include <cs50.h>
#include <stdio.h>
int main(void)
{
float n;
do
{
n = get_float("How much change is owed?\n");
}
while(n == EOF);
int cents = (int)(n * 100);
int minimumamountofcoins = 0;
if (cents/25 >= 1){
while (cents/25 >= 1)
{
cents -= 25;
minimumamountofcoins++;
}
}
if (cents/10 >= 1){
while (cents/10 >= 1)
{
cents -= 10;
minimumamountofcoins++;
}
}
if(cents/5 >= 1){
while (cents/5 >= 1)
{
cents -= 5;
minimumamountofcoins++;
}
}
if (cents/1 >= 1){
while (cents/1 >= 1)
{
cents -= 1;
minimumamountofcoins++;
}
}
printf("The minimum amount of coins is %d\n", minimumamountofcoins);
}
int
вместоfloat
для ввода. - person BLUEPIXY   schedule 17.08.2017int cents = (int)(n * 100);
. Также всеif
условия избыточны, их можно убрать. - person kocica   schedule 17.08.2017float
деньги вint
сint cents = (int)(n * 100);
long cents = lround(n * 100.0);
лучше. 2) Не используйтеfloat
с деньгами. Типичные типы данных C все имеют проблемы с деньгами -float/char
самые худшие. - person chux - Reinstate Monica   schedule 17.08.2017