Comment pouvez-vous append deux fractions?

Comment pouvez-vous append deux fractions en c # comme ceci:

11/6 + 3/4 = 31/12

et ensuite, comment simplifieriez-vous la réponse?

Alors que l’ennui frappe un vendredi soir, il en résulte une classe de fractions avec des opérateurs surchargés. La sobriété du design ne peut être garantie.

Ça marche comme ça …

Fraction left = "1/2"; Fraction right = "3/8"; Fraction result1 = ((left + right) * left / right).Simplify(); Console.WriteLine(result1); Fraction test2 = "12/32"; test2 = test2.Simplify(); Console.WriteLine(test2); 

Mise en œuvre quelque chose comme ci-dessous …

 public struct Fraction { public int Numerator { get; set; } public int Denominator { get; set; } public Fraction(int numerator, int denominator) : this() { Numerator = numerator; Denominator = denominator; } public Fraction Simplify() { int gcd = GCD(); return new Fraction(Numerator / gcd, Denominator / gcd); } public Fraction InTermsOf(Fraction other) { return Denominator == other.Denominator ? this : new Fraction(Numerator * other.Denominator, Denominator * other.Denominator); } public int GCD() { int a = Numerator; int b = Denominator; while (b != 0) { int t = b; b = a % b; a = t; } return a; } public Fraction Reciprocal() { return new Fraction(Denominator, Numerator); } public static Fraction operator +(Fraction left, Fraction right) { var left2 = left.InTermsOf(right); var right2 = right.InTermsOf(left); return new Fraction(left2.Numerator + right2.Numerator, left2.Denominator); } public static Fraction operator -(Fraction left, Fraction right) { var left2 = left.InTermsOf(right); var right2 = right.InTermsOf(left); return new Fraction(left2.Numerator - right2.Numerator, left2.Denominator); } public static Fraction operator *(Fraction left, Fraction right) { return new Fraction(left.Numerator * right.Numerator, left.Denominator * right.Denominator); } public static Fraction operator /(Fraction left, Fraction right) { return new Fraction(left.Numerator * right.Denominator, left.Denominator * right.Numerator); } public static implicit operator Fraction(ssortingng value) { var tokens = value.Split('/'); int num; int den; if (tokens.Length == 1 && int.TryParse(tokens[0], out num)) { return new Fraction(num, 1); } else if (tokens.Length == 2 && int.TryParse(tokens[0], out num) && int.TryParse(tokens[1], out den)) { return new Fraction(num, den); } throw new Exception("Invalid fraction format"); } public override ssortingng ToSsortingng() { return ssortingng.Format("{0}/{1}", Numerator, Denominator); } } 

.Net n’a pas de support intégré (que je sache) pour Rational Numbers , mais il existe au moins une bibliothèque existante.

Votre solution consistera finalement à stocker le numérateur et le dénominateur (probablement dans une classe personnalisée que vous créez), à calculer de manière arithmétique par rapport à d’autres paires numérateur / dénominateur (éventuellement en implémentant des opérateurs surchargés sur votre classe), et à appliquer un algorithme de simplification de fraction.

Voici quelques ressources:

Implémentations existantes

Méthodes de réduction des fractions

Trouvez d’abord l’écran LCD puis procédez comme suit

  num1 *= lcd / denum1; num2 *= lcd / denum2; sumNum = num1 + num2; 

Je n’ai jamais utilisé c # mais je peux vous expliquer comment le faire.

  1. vérifier si le nombre inférieur est le même (égal)
  2. Sinon, créez une boucle qui parcourt tous les nombres et les multiplie par les derniers chiffres. Par exemple, disons simplement que vous avez commencé avec 1, que vous multipliez 1 par 6, puis 1 par 4 si le résultat est identique à celui que vous avez obtenu.
  3. que vous le nombre que vous avez dans # 2 et le multiplier par les premiers chiffres
  4. que simplement append les premiers chiffres
  5. conservez le même nombre en bas
  6. créer une boucle pour voir quel nombre peut être divisé par les deux nombres (haut et bas)