Как упростить дробь, когда оба числа являются целыми

Я должен максимально упростить дробь. Должна быть Ява.

Это то, что у меня есть до сих пор

if (numerator != 0)
    {

        numerator += denominator;
        denominator += numerator /2;
    }

person user3295249    schedule 15.02.2014    source источник
comment
возможный дубликат Как упростить дроби?   -  person OldProgrammer    schedule 15.02.2014
comment
Ваша попытка выглядит совершенно неуместной. Я уверен, что вы можете найти правильный алгоритм для этого. Вам просто нужен наибольший общий делитель.   -  person sashkello    schedule 15.02.2014


Ответы (2)


Я начну с того, что вам нужно больше практики с Java. Ваш код даже близко не...

if (numerator != 0) 
    {
        int common = gcd(Math.abs(numerator), denominator); // Gets a common denominator and uses abs to  make sure it is positive.
        numerator = numerator / common; // Divides top number by common #
        denominator = denominator / common; // Divides bottom number by common #
    }

Вам нужно будет import java.util.Math;, и вам также нужно будет получить GCD, как это сделал я. Чтобы получить GCD, вы говорите

while (num1 != num2)
    {
        if (num1 > num2)
        {
            num1 = num1 - num2;
        }
        else
        {
            num2 = num2 - num1;
        }
    }
    return num1;

Я надеюсь, что это имеет смысл для вас. Это не так уж сложно после того, как вы это поймете. Позвольте мне знать, если у вас есть еще вопросы!

person ChriskOlson    schedule 15.02.2014
comment
Я не понимаю, что делает цикл while в методе GCD - person user3295249; 15.02.2014
comment
@user3295249 user3295249 Я запустил цикл while, чтобы убедиться, что числитель не равен знаменателю. Если бы это было так, это упростилось бы до 1. Поскольку оно не равно 1, если числитель › den, он вычтет den. Наоборот для знаменателя - person ChriskOlson; 15.02.2014
comment
Этот метод gcd ужасно неэффективен. Используйте ответ @SpiderPig. - person Joseph Boyle; 15.02.2014

Кстати. кратчайший возможный метод НОД таков.

static int gcd(int a, int b) {
    if(b == 0) return a;
    else return gcd(b, a%b);
}

это также намного быстрее, чем использование вычитания.

person SpiderPig    schedule 15.02.2014
comment
зачем модифицировать a на b? как это даст вам ценность ?? - person user3295249; 15.02.2014