CS50 Problem Set 1 (алгоритм Cash / Greedy), получающий ошибку времени выполнения: целочисленное переполнение со знаком - PullRequest
1 голос
/ 15 апреля 2020
#include <stdio.h>
#include <cs50.h>
#include <math.h>

int main(void)
{
    int count = 0;
    float change;
    // prompt the user for input
    do
    {
        change = get_float("Change owed: ");
    }
    while (change <= 0);
    int cents = round(change * 100);
    while (change >= 25)
    {
        cents -= 25;
        count ++;
    }
    while (change >= 10)
    {
        cents -= 10;
        count ++;
    }
    while (change >= 5)
    {
        cents -= 5;
        count ++;
    }
    while (change >= 1)
    {
        cents -= 1;
        count ++;
    }
    printf("%i\n", count);  
}

Если удалить функцию «круглый», а затем заменить монеты на 0,25 0,10 и c. Программа работает, но на некоторых входах показывает неправильный ответ. Я не могу думать ни о чем. Я новичок в программировании, но чувствую, что это действительно просто, просто недостаток интеллекта.

1 Ответ

1 голос
/ 15 апреля 2020

О боже. Могу ли я клясться здесь ?? Я такой тупой! Решение было простым! Проблема была: я создал целое число «центов», которое округляет значение «изменения». Но каждый раз l oop для каждого типа цента я писал как (change >= 10), когда это должно было быть (cents >= 10), так что округление действительно происходит. Теперь это работает так, как задумано! Вот исправленный (и немного измененный) код, если кому-то нужна помощь в решении этой проблемы:

#include <stdio.h>
#include <cs50.h>
#include <math.h>

int main(void)
{
    float change;

    int count = 0;
    int total;
    // prompt the user for input
    do
    {
        change = get_float("Change owed: ");
    }
    while (change <= 0); // ask the user for only positive numbers

    //rounds the input and stores the value in the variable "total"
    total = round(change * 100);

    //loops for each type of coins
    while (total >= 25)
    {
        total -= 25;
        count ++;
    }
    while (total >= 10)
    {
        total -= 10;
        count ++;
    }
    while (total >= 5)
    {
        total -= 5;
        count ++;
    }
    while (total >= 1)
    {
        total -= 1;
        count ++;
    }
    //prints the converted(to int) and rounded value
    printf("%i\n", count);  
}
...