C++ программа для вычисления наибольшего общего делителя [закрыто]
Я начал эту программу для вычисления наибольшего общего делителя. Это то, что у меня есть до сих пор:
#include <iostream>
#include <math.h>
using namespace std;
int getGCD(int a, int b)
{
a = a % b;
if (a == 0)
{
return b;
b = b % a;
}
if (b == 0)
{
return a;
}
}
int main()
{
int x, y;
cout << "Please enter two integers x and y, for GCD calculation" << endl;
cin >> x >> y;
cout << "The GCD of " << x << "and " << y << " is" << getGCD(x, y) << endl;
return 0;
}
Я всегда получаю 0 для GCD. Что я делаю не так?
2 ответов
вы должны пройти цикл, чтобы найти это, и это может помочь, если вы поставите с некоторыми уравнениями свой алгоритм для того, как это должно работать.
но у вас есть две проблемы, которые я вижу, если вы звоните внутри другого цикла.
вы возвращаетесь в обоих случаях, либо если, либо иначе, поэтому вы проходите здесь только один раз.
кроме того, эта часть не имеет смысла, зачем изменять b
значение после выполнения return
?
return b;
b = b%a;
вы должны быть использование рекурсии для этого, кстати.
http://rosettacode.org/wiki/Greatest_common_divisor#Recursive_Euclid_algorithm
int getGCD(int a, int b) {
/ / здесь нам нужно проверить, возвращает ли b == 0 a
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
реализация алгоритма Евклида