Скорочення дробів

a / b           чисельник / знаменник

JavaScript

function reduce(numerator, denominator) {     var a = numerator;     var b = denominator;     var c;     while (b) {         c = a % b; a = b; b = c;     }     return [numerator / a, denominator / a]; }

public class Program

{

     public static void Main()

     {

          Calc.Reduce(2,4);

     }

}

public static class Calc

{

     public static int gcd(int answerNumerator, int answerDenominator)

     {

          int x = Math.Abs(answerNumerator);

          int y = Math.Abs(answerDenominator);

          int m;

          if (x > y)

               m = y;

          else

               m = x;

          for (int i = m; i >= 1; i--)

          {

               if (x % i == 0 && y % i == 0)

               {

                    return i;

               }

          }

          return 1;

     }

     public static void Reduce(int answerNumerator, int answerDenominator)

     {

          WriteFraction(answerNumerator, answerDenominator);

          try

          {

               int gcdNum = gcd(answerNumerator, answerDenominator);

               if (gcdNum != 0)

               {

                    answerNumerator = answerNumerator / gcdNum;

                    answerDenominator = answerDenominator / gcdNum;

               }

               if (answerDenominator < 0)

               {

                    answerDenominator = answerDenominator * -1;

                    answerNumerator = answerNumerator * -1;

               }

          }

          catch (Exception exp)

          {

               throw new InvalidOperationException("Cannot reduce Fraction: " + exp.Message);

          }

          WriteFraction(answerNumerator, answerDenominator);

     }


     public static void WriteFraction(int answerNumerator, int answerDenominator)

     {

          Console.WriteLine(string.Format(answerNumerator + "/" + answerDenominator));

     }

}