C# trouver le plus grand commun diviseur
"Le plus grand commun diviseur de deux nombres entiers est le plus grand entier qui uniformément divise chacun des deux nombres. La méthode d'écriture Pgcd qui renvoie le plus grand commun diviseur de deux nombres entiers. Incorporer la méthode dans une application qui lit deux valeurs de l'utilisateur et affiche le résultat."
(ce n'est pas de devoirs, juste un exercice dans le livre que je suis en utilisant)
pouvez-vous m'aider à résoudre ce problème? Voici ce que j'ai obtenu jusqu'à présent. Grâce
(modifier - je peux envoyer les deux chiffres, mais il ne sera pas calculer le Pgcd pour moi)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Greatest_Common_Divisor
{
class Program
{
static int GetNum(string text)
{
bool IsItANumber = false;
int x = 0;
Console.WriteLine(text);
do
{
IsItANumber = int.TryParse(Console.ReadLine(), out x);
} while (!IsItANumber);
return x;
}
static void Main(string[] args)
{
string text = "enter a number";
int x = GetNum(text);
text = "enter a second number";
int y = GetNum(text);
int z = GCD(x, y);
Console.WriteLine(z);
}
private static int GCD(int x, int y)
{
int v = 0;
int n = 0;
v = GetGreatestDivisor(x, y);
return v;
}
static int GetGreatestDivisor(int m, int h)
{
do
{
for (int i = m; i <= 1; i--)
if (m%i == 0 && h%i == 0)
{
int x = 0;
x = i;
return x;
}
} while (true);
return m;
}
}
}
Votre code ne fonctionne pas ou tout simplement incomplète?
Quel est le problème ici?
Je peux envoyer les deux chiffres, mais il ne sera pas calculer le Pgcd pour moi
Vous devriez vérifier le algorithme d'Euclide.
Quel est le problème ici?
Je peux envoyer les deux chiffres, mais il ne sera pas calculer le Pgcd pour moi
Vous devriez vérifier le algorithme d'Euclide.
for (int i = m; i <= 1; i--)
ne sera pas exécuté lorsque m > 1
, vous signifiait i >= 1
.OriginalL'auteur user2723261 | 2013-08-30
Vous devez vous connecter pour publier un commentaire.
Voici une implémentation de la Algorithme d'euclide qui renvoie le plus grand commun diviseur sans effectuer aucune allocation de tas.
Vous pouvez remplacer
ulong
pouruint
si nécessaire. Un type non signé est utilisé, car la technique ne fonctionne pas pour les valeurs signées. Si vous savez que votrea
etb
les valeurs ne sont pas négatifs, vous pouvez utiliserlong
ouint
à la place.Cette méthode est utilisée dans mon métadonnées-extracteur de la bibliothèque, où il est associé à des les tests unitaires.
Ils calculer le PGCD d'un ensemble parce qu'ils sont de copier et de coller le code qu'ils ne comprennent pas d'une réponse à une question distincte.
Agréable et propre - pas de LINQ-soupe mixte. Et avec ça, exactement ce que je cherchais pour mon propre petit "dilemme". 😀
Oh, cela fonctionne très bien avec entrée négative(s): il suffit de retourner le signe des valeurs négatives avant d'entrer en boucle... if(a<0)a=-a; si(b<0)b=-b;
OriginalL'auteur Drew Noakes
À l'aide de LINQ Globale de la méthode:
Remarque: la réponse ci-dessus emprunté à accepté de répondre à Plus grand Diviseur Commun à partir d'un ensemble de plus de 2 entiers.
il serait très agréable de répondre à cela, Karl. Votre réponse est en effet incorrect.
OriginalL'auteur Karl Anderson
Vous pouvez essayer d'utiliser cette:-
OriginalL'auteur Rahul Tripathi
Essayez ceci:
OriginalL'auteur user2623931
OriginalL'auteur Chang
OriginalL'auteur seyed