Как вы можете добавить две фракции в C# как это:Как вы можете добавить две фракции?
11/6 + 3/4 = 31/12
, а затем, как бы упростить ответ?
Как вы можете добавить две фракции в C# как это:Как вы можете добавить две фракции?
11/6 + 3/4 = 31/12
, а затем, как бы упростить ответ?
Найти ЖК-первых, то сделайте следующее
num1 *= lcd/denum1;
num2 *= lcd/denum2;
sumNum = num1 + num2;
что такое ldc .. ?? –
Idc, где я использовал его – Dotnet
@hi tech: Я думаю, он имел в виду «Наименее распространенный множественный», и да, lcd - это бедный аббревиатура для этого. –
.Net не имеет встроенной поддержки (что я знаю) для Rational Numbers, но есть по крайней мере одна существующая библиотека там.
Ваше решение в конечном счете сводится к хранению числителя и знаменателя (возможно, в созданном вами специальном классе), выполняя арифметику против других пар цифр/знаменателей (возможно, с помощью implementing overloaded operators в вашем классе) и применяя алгоритм упрощения фракций ,
Вот некоторые ресурсы:
Существующие реализации
Способы снижения фракций
Я никогда не использовал C#, но я могу дать вам объяснение того, как это сделать.
Найти LCM через вложенный цикл? Есть много лучших способов сделать это. –
@Ben: Рекурсия! – Mehrdad
@Mehrdad: Я предполагаю, что это «через все числа», с которыми я действительно сталкиваюсь. Я мог бы сформулировать этот комментарий лучше. –
Как удары скуки в пятницу вечером ... в результате получается класс фракций с перегруженными операторами. Трезвость дизайна не может быть гарантирована.
как это работает ...
Fraction left = "1/2";
Fraction right = "3/8";
Fraction result1 = ((left + right) * left/right).Simplify();
Console.WriteLine(result1);
Fraction test2 = "12/32";
test2 = test2.Simplify();
Console.WriteLine(test2);
что-то реализация, как показано ниже ...
public struct Fraction
{
public int Numerator { get; set; }
public int Denominator { get; set; }
public Fraction(int numerator, int denominator)
: this()
{
Numerator = numerator;
Denominator = denominator;
}
public Fraction Simplify()
{
int gcd = GCD();
return new Fraction(Numerator/gcd, Denominator/gcd);
}
public Fraction InTermsOf(Fraction other)
{
return Denominator == other.Denominator ? this :
new Fraction(Numerator * other.Denominator, Denominator * other.Denominator);
}
public int GCD()
{
int a = Numerator;
int b = Denominator;
while (b != 0)
{
int t = b;
b = a % b;
a = t;
}
return a;
}
public Fraction Reciprocal()
{
return new Fraction(Denominator, Numerator);
}
public static Fraction operator +(Fraction left, Fraction right)
{
var left2 = left.InTermsOf(right);
var right2 = right.InTermsOf(left);
return new Fraction(left2.Numerator + right2.Numerator, left2.Denominator);
}
public static Fraction operator -(Fraction left, Fraction right)
{
var left2 = left.InTermsOf(right);
var right2 = right.InTermsOf(left);
return new Fraction(left2.Numerator - right2.Numerator, left2.Denominator);
}
public static Fraction operator *(Fraction left, Fraction right)
{
return new Fraction(left.Numerator * right.Numerator, left.Denominator * right.Denominator);
}
public static Fraction operator /(Fraction left, Fraction right)
{
return new Fraction(left.Numerator * right.Denominator, left.Denominator * right.Numerator);
}
public static implicit operator Fraction(string value)
{
var tokens = value.Split('/');
int num;
int den;
if (tokens.Length == 1 && int.TryParse(tokens[0], out num))
{
return new Fraction(num, 1);
}
else if (tokens.Length == 2 && int.TryParse(tokens[0], out num) && int.TryParse(tokens[1], out den))
{
return new Fraction(num, den);
}
throw new Exception("Invalid fraction format");
}
public override string ToString()
{
return string.Format("{0}/{1}", Numerator, Denominator);
}
}
как если фракция + цельный .. ?? –
Я модифицировал неявный оператор для поддержки создания дроби из целого числа. 'Fraction whole =" 5 "' будет работать. Кроме того, вы можете сделать что-то отличное, например, «Fraction test = left +» 5 »;' – Jon
Bravo. Это фантастика. Для этого вы заслуживаете столько стимулов. Это не должно быть обычной проблемой. – Samo
Опубликовать свой текущий прогресс. –
http://en.wikipedia.org/wiki/Least_common_multiple http://en.wikipedia.org/wiki/Greatest_common_divisor –