Programme en C++ pour calculer le plus grand commun diviseur
J'ai commencé ce programme pour calculer le plus grand commun diviseur. C'est ce que j'ai à ce jour:
#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;
}
Je reçois toujours un 0 pour le PGCD. Ce que je fais mal?
- b = b % a; ne s'exécutera jamais
- vérifier le retour à la ligne b; et demandez-vous, comment le programme peut exécuter b = b % a; si vous le disais en début de retour de cette fonction.
- si c'est les devoirs, vous devez ajouter la balise appropriée 🙂
- pour le fun, voir le PGCD algo évaluée au moment de la compilation (à l'aide de modèles): blog.emptycrate.com/node/279
- Le fait que votre fonction prétend toujours le bon résultat après un seul appel, devrait donner quelque chose d'anormal.
int g(int a, int b){ return b?g(b,a%b):a;}
Vous devez vous connecter pour publier un commentaire.
Vous devriez être en boucle à travers pour trouver cela, et il peut aider si vous mettez, avec quelques équations, votre algorithme pour savoir comment cela devrait fonctionner.
Mais vous avez deux problèmes que je vois, sauf si vous appelez à l'intérieur d'une autre boucle.
Vous êtes de retour dans les deux cas, que ce soit le cas ou d'autre, de sorte que vous ne passez par ici une fois.
Aussi, cette partie n'a pas de sens, pourquoi modifier le
b
valeur, après avoir fait unreturn
?Vous devriez être en utilisant la récursivité pour cela, btw.
http://rosettacode.org/wiki/Greatest_common_divisor#Recursive_Euclid_algorithm
//ici, nous avons besoin de vérifier si b == 0 retourner un
D'euclide l'Algorithme de mise en Œuvre