char FindCommonDigit(Fraction fraction) { foreach (var c in fraction.Numerator.ToString()) { if (fraction.Denominator.ToString().Contains(c)) return c; } return char.MinValue; }
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)); }
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; }
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; }
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); } }
private bool DoesNumeratorHaveMoreDigits(Fraction num) { return(GetDigitCount(num.Numerator) > GetDigitCount(num.Denominator)); }
private bool IsTrivial(Fraction fraction) { return fraction.Numerator % 10 == 0 || fraction.Denominator % 10 == 0; }
public bool CanBeReducedTo(Fraction fraction) { if (numerator == 0 || denominator == 0 || fraction.Numerator == 0 || fraction.Denominator == 0) return false; return this.AsDecimal() == fraction.AsDecimal(); }
private bool IsTrivial(Fraction fraction) { return(fraction.Numerator % 10 == 0 || fraction.Denominator % 10 == 0); }