2013-05-31 8 views
0

현재 작업중인 프로젝트는 프로그램을 두 부분으로 나누어 함께 추가하고 대답을 단순화 할 것을 요구합니다. 나는 분수를 합쳐서 끝내었지만 분수를 단순화하는 방법을 알 수는 없습니다.분수의 단순화

P. 지금까지 토핑에서 보았던 모든 것이 정말 혼란스럽고 대답을 간단하게 만들 수 있다면 도움이 될 것입니다. 감사합니다!

import java.io.*; 
import java.util.*; 
import static java.lang.Math.*; 

public class Fractions { 

public static void main(String[] args) { 
Scanner Scan = new Scanner(System.in); 
System.out.println("Numerator A"); 
int NuA = Scan.nextInt(); 
System.out.println("Denominator A"); 
int DeA = Scan.nextInt(); 
System.out.println("Numerator B"); 
int NuB = Scan.nextInt(); 
System.out.println("Denominator B"); 
int DeB = Scan.nextInt(); 

double NumA = NuA * DeB; 
double NumB = NuB * DeA; 
double Denominator= DeA * DeB; 

double Numerator=NumA + NumB; 

} 
} 
+0

일반적으로 변수 이름의 첫 문자가 더 낮습니다. 스캔 -> 스캔, NumA -> numA 및 NumB -> numB 등 –

+0

왜 '이중'을 사용합니까? 분수의 분자와 분모는 항상 정수입니다 ... – fge

+0

분수를 단순화하기 위해 종이/머리에 무엇을 할 것입니까? – Fildor

답변

0

먼저 분수가 가장 적은 항목을 줄이는 방법을 기억하십시오. 을 감안할 때 정수 ab,

a/b == (a/m)/(b/m) where m is the greatest common divisor of a and b. 

최대 공약수 서면 GCD (A, B) 또는 단지 (A, B) 수학, 가장 쉽게 얻을 수 유클리드의 알고리즘을 사용하는 것입니다 :

(111, 45) == (21, 45) since 111 = 2 * 45 + 21. 
      == (45, 21) 
      == (3, 21) since 45 = 2 * 21 + 3 
      == (21, 3) 
      == (0, 3) since 21 = 7 * 3 + 0. 
      == 3  stop when one number is zero. 

이제 Integer도 아니고 Number도 아니고 Mathgcd 방법이 없으므로 알고리즘을 배우려는 경우에만 직접 작성해야합니다. 그러나 BigInteger이 있습니다. 따라서 Fraction 클래스를 만듭니다. 우리는 그것을 불변으로 만들 것이므로 Number을 확장 할 수 있습니다. 따라서 우리는 그것을 구성 할 때 가장 낮은 조건으로 줄여야합니다.

public class Fraction extends Number { 
    private final BigInteger numerator; 
    private final BigInteger denominator; 
    public Fraction(final BigInteger numerator, final BigInteger denominator) { 
     BigInteger gcd = numerator.gcd(denominator); 
     // make sure negative signs end up in the numerator only. 
     // prefer 6/(-9) to reduce to -2/3, not 2/(-3). 
     if (denominator.signum() == -1) { 
      gcd = gcd.negate(); 
     } 
     this.numerator = numerator.divide(gcd); 
     this.denominator = denominator.divide(gcd); 
    } 
} 

이제 나머지 수학 루틴을 추가하십시오. null, 0으로 나누기, 무한대 또는 NaN에 대해서는 아무 것도하지 않았습니다.