Я был бы очень признателен, если бы кто-нибудь взглянул на мой код и объяснил мне, почему наибольший общий делитель всегда возвращается как 1. Я использую алгоритм Евклида для нахождения gcd.

#include 

using namespace std;

int gcd(int a, int b)
{
    while (b)
    {
        int tmp = b;
        b = a % b;
        a = tmp;
    }
    
    return a;
}


int main()
{
    cout << "Enter first integer: ";
    int a;
    cin >> a;
    
    cout << "Enter second integer: ";
    int b;
    cin >> b;
    
    int gcd(int a, int b);
    
    cout << "The greatest common divisor is: " << gcd << endl;
    
    return 0;
}

Alethea

Ответов: 2

Ответы (2)

Вы не храните GCD как переменную. Вы должны сделать что-то вроде этого:

int gcdCalc = gcd(a, b);

cout << "The greatest common divisor is: " << gcdCalc << endl;

Также, поскольку большинство чисел относительно просты друг к другу, GCD в большинстве случаев будет равен 1. Попробуйте сделать это с 48 и 2, вы должны получить GCD равное 2.

Вызов функции некорректен. Вы пытаетесь переопределить функцию внутри функции, что невозможно, Для переопределения функции внутри функции используйте lamda functions. Вы можете вызвать функцию внутри оператора cout, как я сделал в приведенном ниже коде.

Примечание : использование пространства имен std никогда не считается хорошей практикой, старайтесь избегать этого, насколько это возможно.

Счастливого кодинга.

#include 


int gcd(int a, int b) {
    while (b) {
        int tmp = b;
        b = a % b;
        a = tmp;
    }

    return a;
}


int main() {
    std::cout << "Введите первое целое число: ";
    int a;
    std::cin >> a;

    std::cout << "Введите второе целое число: ";
    int b;
    std::cin >> b;


    std::cout << "Наибольший общий делитель равен: " << gcd(a, b) << "\n";

    return 0;
}

2022 WebDevInsider