Rational
Retired DISLab
public class Rational { /** 값이 0인 실수를 만든다. */ public Rational() { this(0); } /** * 정수 크기의 실수를 만든다. * @param n 초기값 */ public Rational(int n) { this(n, 1); } /** * x / y에 해당하는 실수 * @param x 분자 * @param y 분모 */ public Rational(int x, int y) { int g = gcd(Math.abs(x), Math.abs(y)); num = x / g; den = Math.abs(y) / g; if (y < 0) num -= num; } /** * 이 수에 실수 r을 더한다. * @param r 더할 실수 * @return 현재 수와 r의 합 */ public Rational add(Rational r) { return new Rational(this.num * r.den + r.num * this.den, this.den * r.den); } /** * 이 수에서 실수 r을 뺀다. * @param r 뺄 수 * @return 현재 수에서 r을 뺀 값 */ public Rational subtract(Rational r) { return new Rational(this.num * r.den - r.num * this.den, this.den * r.den); } /** * 이 수에서 실수 r을 곱한다. * @param r 곱할 수 * @return 현재 수에서 r을 곱한 값 */ public Rational multiply(Rational r) { return new Rational(this.num * r.num, this.den * r.den); } /** * 이 수에서 실수 r을 나눈다. * @param r 나눌 수 * @return 현재 수에서 r을 나눈 값 */ public Rational devide(Rational r) { return new Rational(this.num * r.den, this.den * r.num); } /** * 실수를 표현하는 문자열 * @return 실수에 해당하는 문자열 */ public String toString() { if (den == 1) { return "" + num; } else { return num + "/" + den; } } /** * 유클리드 알고리즘에 의한 두 수의 최대공약수를 구함 * @param x 첫번째 정수 * @param y 두번째 정수 * @return x와 y의 최대공약수 */ private int gcd(int x, int y) { int r = x % y; while (r != 0) { x = y; y = r; r = x % y; } return y; } /* Private instance variables */ private int num; /* 분자 */ private int den; /* 분모 */ }