2011-09-25 15 views
6

Uruchomiłem ten program, aby obliczyć największy wspólny dzielnik. Oto, co mam do tej pory:Program C++ do obliczenia największego wspólnego dzielnika

#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; 
} 

Zawsze otrzymuję 0 dla GCD. Co ja robię źle?

+1

b = b% a; nigdy nie wykona – Mikhail

+0

sprawdź powrotu linii b; i zadaj sobie pytanie, w jaki sposób program może wykonać b = b% a; jeśli wcześniej to powiedziałeś, aby powrócić z tej funkcji. – dowhilefor

+0

jeśli to zadanie domowe, powinieneś dodać odpowiedni tag :) –

Odpowiedz

2

Powinieneś być w pętli, aby to znaleźć, i może ci to pomóc, jeśli zastosujesz algorytm, w jaki sposób to zadziała, z pewnymi równaniami.

Ale widzisz dwa problemy, chyba że wywołasz to w innej pętli.

Powracasz w obu przypadkach, albo jeśli, albo inaczej, więc przechodzisz tutaj tylko raz.

Ta część nie ma sensu, po co modyfikować wartość b po wykonaniu return?

  return b; 

      b = b%a; 

Powinieneś używać rekursji do tego, przy okazji.

http://rosettacode.org/wiki/Greatest_common_divisor#Recursive_Euclid_algorithm

+2

Rekursji nie należy do tego używać. Iteracja, aby znaleźć GCD, była wystarczająco dobra dla Euklidesa (* Elementy * około 300 roku pne, Księga VII, zdania 1 i 2) i jest wystarczająco dobra dla ciebie. –

+0

@EricPostpischil - Uważam, że rekurencja stanowi prostsze rozwiązanie, ale ostatecznie zależy to od tego, co OP chce zrobić, po prostu wydałem opinię, z linkiem do źródła, aby pomóc. –

2
int getGCD(int a, int b) { 

// tutaj musimy sprawdzić, czy b == 0 zamian implementacji

if (b == 0) { 
     return a; 
    } 
    return gcd(b, a % b); 
} 

Algorytm Euklidesa

+0

Sterowanie może osiągnąć koniec funkcji nieważnej. –

+0

linia b = a% b powinna być a = a% b i odwrotnie – muhammedabuali