Найти египетские фракции в C#

Египетская фракция представляет собой долю, выраженную в виде суммы отдельных единичных дробей. Например, вы можете написать 3/7 как 1/3 + 1/11 + 1/231.

Вы можете написать любую фракцию как египетскую фракцию, и может быть несколько способов сделать это.

Один простой алгоритм для нахождения египетских фракций состоит в вычитании наибольшей частичной единицы, которая меньше исходного значения, а затем повторяется с результатом.

В этом примере используется класс Fraction, описанный в сообщении Сделайте класс фракции в C# . См. Этот пример для большинства деталей этого класса. Для обработки египетских фракций я добавил несколько операторов сравнения. Чтобы упростить сравнение фракций и целых чисел, я также добавил оператора для преобразования из long в Fraction. Следующий код показывает наиболее интересные новые фрагменты кода.

// Возвращает a & lt; б.
public static bool operator <(Fraction a, Fraction b)
{
    return (double)a < (double)b;
}

// Возвращаем & gt; б.
public static bool operator >(Fraction a, Fraction b)
{
    return (double)a > (double)b;
}

Следующий код показывает, как программа использует пересмотренный класс Fraction для поиска египетских фракций.

// Возвращает строковое представление египетской фракции.
private List GetEgyptianFraction(Fraction frac)
{
    List result = new List();

    // Удалите часть целого числа.
    int whole_part = (int)(frac.Numerator / frac.Denominator);
    if (whole_part > 0)
    {
        result.Add(whole_part);
        frac = frac - whole_part;
    }

    // Вытаскиваем единичные фракции.
    long denom = 2;
    while (frac > 0)
    {
        // Делаем меньшую единицу фракции до тех пор, пока она не подходит.
        Fraction unit_fraction = new Fraction(1, denom);
        while (unit_fraction > frac)
        {
            denom++;
            unit_fraction = new Fraction(1, denom);
        }

        // Удаление единицы.
        result.Add(unit_fraction);
        frac -= unit_fraction;
        denom++;
    }

    return result;
}

Сначала код удаляет из дроби всю целую часть. Например, он преобразует 12/5 в 2 + 2/5.

Источник: http://csharphelper.com/blog/2015/06/find-egyptian-fractions-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector