#include <stdio.h>
#include <cs50.h>
#include <math.h>
int main (void) {
printf ("Enter amount: ");
float amount = GetFloat();
int coins = 0;
while (amount != 0) {
if (fmod(amount, 0.25) == 0) {
amount = amount - 0.25;
coins += 1;
}
else if (fmod(amount, 0.10) == 0) {
amount = amount - 0.10;
coins += 1;
}
else if (fmod(amount, 0.05) == 0) {
amount = amount - 0.05;
coins += 1;
}
else {
amount = amount - 0.01;
coins += 1;
}
}
printf ("Coins : %d\n", coins);
}
Я пытаюсь реализовать маленький жадный алгоритм, в который пользователь вводит сумму денег (пример: 9.25), и мы выводим наименьшее количество монет, которые нам нужны обменять его на изменение (25 центов, 10 центов, 5 центов и 1 цент).Целочисленное переполнение в жадном подсчете монеты
Этот алгоритм работает с целыми количествами, равными 10 или 20, и с суммами, которые требуют, чтобы программа использовала 25 центов.
Если я попробую сумму, равную 9,10 или 9,01, я получаю ошибку времени выполнения, целое переполнение целых чисел. Я понимаю, что это значит, но я не понимаю, как стоимость монет может быть настолько высокой.
Умножьте его на 100 и сделайте это как с целыми числами –
Я пробовал эту версию, и она дает ту же ошибку, работает с целыми числами и числами, которые заканчиваются на .25, что-то еще не работает. –
Я попробовал запустить код для '9.01'. Он работает нормально. Дает '37' монеты как выход. – skrtbhtngr