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;	/* 분모 */
}
개인 도구
이름공간
변수
행위
둘러보기
구성원
연구
연구실
기타
도구모음
인쇄/내보내기