Ejemplo n.º 1
0
 char FindCommonDigit(Fraction fraction)
 {
     foreach (var c in fraction.Numerator.ToString()) {
     if (fraction.Denominator.ToString().Contains(c)) return c;
       }
       return char.MinValue;
 }
Ejemplo n.º 2
0
        Fraction RemoveCommonDigits(Fraction fraction)
        {
            var commonDigit = FindCommonDigit(fraction);
              var regex = new Regex(commonDigit.ToString());
              var modifiedNumerator = regex.Replace(fraction.Numerator.ToString(), string.Empty, 1);
              var modifiedDenominator = regex.Replace(fraction.Denominator.ToString(), string.Empty, 1);

              return new Fraction(int.Parse(modifiedNumerator), int.Parse(modifiedDenominator));
        }
Ejemplo n.º 3
0
        Fraction Calculate(Stack<double> s)
        {
            Fraction result = new Fraction { H = "0", K = "1" };
            foreach(double i in s)
            {
                if (result.H == "0")
                    result = new Fraction { H = i.ToString(), K = "1" };
                else
                    result = new Fraction
                    {
                        H = Common.AddLargeInt(Common.MultiplyLargeInt(result.H, i.ToString()), result.K),
                        K = result.H
                    };
            }

            return result;
        }
Ejemplo n.º 4
0
        public override long Solve()
        {
            var curiousFractions = new List<Fraction>();

              for (int numerator = 11; numerator < 99; numerator++) {
            for (int denominator = numerator + 1; denominator < 100; denominator++) {
              var fraction = new Fraction(numerator, denominator);

              if (fraction.HasCommonDigits() && !IsTrivial(fraction)) {
            var fractionWithCommonDigitsRemoved = RemoveCommonDigits(fraction);
            if (fraction.CanBeReducedTo(fractionWithCommonDigitsRemoved)) {
              curiousFractions.Add(fraction);
            }
              }
            }
              }
              var productOfFractions = curiousFractions.Aggregate((product, nextFraction) => product * nextFraction);
              var reduced = productOfFractions.Reduce();
              return reduced.Denominator;
        }
Ejemplo n.º 5
0
            internal RootForm(int n)
            {
                int r = 1;
                while (r * r <= n)
                    r++;
                r--;
                int d = n - r * r;
                if (d == 0)
                    return;
                int a = 1;
                while ((r - d * a) * (r - d * a) < n)
                    a++;
                a--;

                Fraction f = new Fraction { Up = d * a - r, Down = d };
                while (true)
                {
                    if (_period.Contains(f))
                        return;
                    _period.Add(f);
                    f = f.Next(n);
                }
            }
Ejemplo n.º 6
0
 private bool DoesNumeratorHaveMoreDigits(Fraction num)
 {
     return(GetDigitCount(num.Numerator) > GetDigitCount(num.Denominator));
 }
Ejemplo n.º 7
0
 private bool IsTrivial(Fraction fraction)
 {
     return fraction.Numerator % 10 == 0 || fraction.Denominator % 10 == 0;
 }
Ejemplo n.º 8
0
 public bool CanBeReducedTo(Fraction fraction)
 {
     if (numerator == 0 || denominator == 0 || fraction.Numerator == 0 || fraction.Denominator == 0) return false;
       return this.AsDecimal() == fraction.AsDecimal();
 }
Ejemplo n.º 9
0
 private bool IsTrivial(Fraction fraction)
 {
     return(fraction.Numerator % 10 == 0 || fraction.Denominator % 10 == 0);
 }