2014-02-15 2 views
-2

가능한 한 분수를 단순화해야합니다. Java 여야합니다.num이 모두 int 일 때 분수를 단순화하는 방법

이것은 내가 지금까지

if (numerator != 0) 
    { 

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

[분수를 단순화하는 방법?] (http://stackoverflow.com/questions/5287514/how-to-simplify-fractions) – OldProgrammer

+0

당신의 시도는 완전히 무의미 해 보입니다. 나는 당신이 그것에 대한 적절한 알고리즘을 찾을 수있을 것이라고 확신합니다. 가장 큰 공통 제수가 필요합니다. – sashkello

답변

0

난 당신이 자바 더 많은 연습이 필요하다는 것을 말하는 것으로 시작하겠습니다 무슨이다. 코드는

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; 

이 정보가 도움이되기를 바랍니다. 당신이 그것을 이해하면 너무 어렵지 않습니다. 더 궁금한 점이 있으면 알려주세요.

+0

while 루프가 GCD 메서드에서 수행하는 것을 얻지 못합니다 – user3295249

+0

@ user3295249 while 루프를 실행하여 분자가 분모와 같지 않은지 확인했습니다. 그렇다면 1로 단순화됩니다. 왜냐하면 1과 같지 않으므로 numerator> den이면 동사를 감산합니다. 분모에 대한 부사장 – ChriskOlson

+1

그 gcd 방법은 대단히 비효율적입니다. @ SpiderPig의 대답 중 하나를 사용하십시오. –

2

btw. 가능한 가장 짧은 gcd 방법은 이것입니다.

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

뺄셈을 사용하는 것보다 훨씬 빠릅니다.

+0

왜 mod by a by b? 어떻게 당신에게 가치를 줄까요 ?? – user3295249