Я пытаюсь сложить две вульгарные дроби вместе, найдя наименьший общий знаменатель и затем сложив. Однако мой код ведет себя не так, как ожидалось, и выводит два очень высоких отрицательных числа. Когда я изменяю вторую дробь на 3/15, она выводит 0/0.
Вот мой основной программный код:
class Program
{
static void Main(string[] args)
{
Fraction n = new Fraction(2, 4);
Fraction z = new Fraction(3, 12);
Fraction sum = n.Add(z, n);
int num = sum.Numerator;
int den = sum.Denominator;
Console.WriteLine("{0}/{1}", num, den);
Console.ReadKey(true);
}
}
Вот мой код Fraction
класса:
internal class Fraction
{
public Fraction(int numerator, int denominator)
{
Numerator = numerator;
Denominator = denominator;
}
public int Numerator { get; private set; }
public int Denominator { get; private set; }
public Fraction Add(Fraction fraction2, Fraction fraction8)
{
int lcd = GetLCD(fraction8, fraction2);
int x = lcd/fraction8.Denominator;
int n = lcd/fraction2.Denominator;
int f2num = fraction2.Numerator*n;
int f8num = fraction8.Numerator*x;
int t = fraction2.Numerator;
Fraction Fraction3 = new Fraction(f2num+f8num,lcd);
return Fraction3;
}
public int GetLCD(Fraction b, Fraction c)
{
int i = b.Denominator;
int j = c.Denominator;
while (true)
{
if (i == j)
{
return i;
}
j = j + j;
i = i + i;
}
}
}
using
. Если серьезно, вам нужно немного сузить проблему. Похоже, что вы вообще не приложили никаких усилий, чтобы отладить это. Кроме того, имена ваших переменных ужасны. - person tnw   schedule 25.09.2013GetLCD
не делает то, что вы думаете. - person Dave Zych   schedule 25.09.2013GetLCD
, первая итерация проверяет2 == 4
, вторая проверяет4 == 8
, третья проверяет8 == 16
и т.д. и т.д. и т. Д. Они никогда не будут равны. Я предполагаю, что единственная причина, по которой что-то было возвращено, - это переполнение или что-то в этом роде. - person Dave Zych   schedule 26.09.2013