Как упростить части в C#?

Я ищу библиотеку или существующий код для упрощения частей.

У кого-либо есть что-нибудь под рукой или какие-либо ссылки?

P.S. Я уже понимаю процесс, но действительно не хочу переписывать колесо

Обновление

Хорошо я проверил дробную библиотеку по CodeProject, НО проблемой, которую я имею, является немного tricker, чем упрощение части.

Я должен уменьшить разделение процента, которое могло составить 20% / 50% / 30% (всегда равный 100%)

5
задан Dinah 21 August 2010 в 22:10
поделиться

5 ответов

Я думаю, вам просто нужно разделить на НОД все числа.

void Simplify(int[] numbers)
{
    int gcd = GCD(numbers);
    for (int i = 0; i < numbers.Length; i++)
        numbers[i] /= gcd;
}
int GCD(int a, int b)
{
    while (b > 0)
    {
        int rem = a % b;
        a = b;
        b = rem;
    }
    return a;
}
int GCD(int[] args)
{
    // using LINQ:
    return args.Aggregate((gcd, arg) => GCD(gcd, arg));
}

Я не пробовал код, но он кажется достаточно простым, чтобы быть правым (при условии, что все ваши числа являются положительными целыми числами и вы не передаете пустой массив).

13
ответ дан 18 December 2019 в 07:28
поделиться

Вы можете использовать Microsoft.FSharp.Math.BigRational, который находится в бесплатной библиотеке F # Power Pack . Хотя это зависит от F # (который предоставляется бесплатно и включен в VS2010), его можно использовать из C #.

BigRational reduced = BigRational.FromInt(4)/BigRational.FromInt(6);
Console.WriteLine(reduced);
    2/3
Console.WriteLine(reduced.Numerator);
    2
Console.WriteLine(reduced.Denominator);
    3
4
ответ дан 18 December 2019 в 07:28
поделиться

Индивидуальное решение:

void simplify(int[] numbers)
{
    for (int divideBy = 50; divideBy > 0; divideBy--)
    {
        bool divisible = true;
        foreach (int cur in numbers)
        {   

            //check for divisibility
            if ((int)(cur/divideBy)*divideBy!=cur){
                divisible = false;
                break;
            }

        }
        if (divisible)
        {
            for (int i = 0; i < numbers.GetLength(0);i++ )
            {
                numbers[i] /= divideBy;
            }
        }
    }
}

Пример использования:

int [] percentages = {20,30,50};
simplify(percentages);
foreach (int p in percentages)
{
    Console.WriteLine(p);
}

Выходы:

2
3
5

Кстати, это моя первая программа на C #. Подумал, что было бы просто весело попробовать новый язык, и теперь я влюблен! Это похоже на Java, но все, что я хотел, было немного другим, это именно то, что я хотел

<3 c #


Edit: Кстати, не забудьте сделать его static void, если это для вашего класса Main.

2
ответ дан 18 December 2019 в 07:28
поделиться

Эта библиотека выглядит так, как будто это то, что вам нужно:

var f = new Fraction(numerator, denominator);
numerator = f.Numerator;
denominator = f.Denominator;

Хотя я не тестировал ее, поэтому похоже, что вам, возможно, придется поэкспериментировать с ней, чтобы заставить ее работать.

1
ответ дан 18 December 2019 в 07:28
поделиться

Лучший пример Fraction (он же Rational), который я видел, можно найти в Тимоти Бадда «Классические структуры данных в C ++» . Его реализация очень хороша. Он включает простую реализацию алгоритма GCD.

Адаптироваться к C # не составит труда.

1
ответ дан 18 December 2019 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: