유클리드 호제법(Euclidean Algorithm) - 최대공약수 구하기
- 2개의 자연수 또는 정식(整式)의 최대공약수(Greatest Common Divisor)를 구하는 알고리즘의 하나.
- 2개의 자연수 a, b에 대해서 (a > b)일때, r = a%b라 하면 (a, b)의 최대 공약수는 (b, r)의 최대 공약수와 같다.
- (b, r)은 다시 r1 = b%r, 이는 (b, r)의 최대 공약수는 (r, r1)의 최대 공약수와 같다. 이를 오른쪽 수(나머지)가 0이 될때까지 반복한다.
- 오른쪽 수(나머지)가 0이 되면 왼쪽 수가 최대 공약수다.
/* Rational.java */
public class Rational {
private int numerator; // 분자
private int denominator; // 분모
public Rational(int numerator, int denominator) { // 생성자
if (denominator == 0) {
throw new RuntimeException("denominator can't be 0");
}
int gCD = this.gCD(numerator, denominator);
this.numerator = numerator / gCD;
this.denominator = denominator / gCD;
}
public Rational add(Rational rational) { // 덧셈
int numerator = (this.numerator * rational.denominator) + (this.denominator * rational.numerator);
int denominator = this.denominator * rational.denominator;
return new Rational(numerator, denominator);
}
public Rational subtract(Rational rational) { // 뺄셈
int numerator = (this.numerator * rational.denominator) - (this.denominator * rational.numerator);
int denominator = this.denominator * rational.denominator;
return new Rational(numerator, denominator);
}
public Rational times(Rational rational) { // 곱셈
int numerator = this.numerator * rational.numerator;
int denominator = this.denominator * rational.denominator;
return new Rational(numerator, denominator);
}
private int gCD(int m, int n) { // 최대 공약수를 만들어내는 재귀 메소드
return (n==0) ? m : gCD(n, m%n);
}
public String toString() {
return this.numerator + "/" + this.denominator;
}
public void Set(int numerator, int denominator) {
this.numerator = numerator;
this.denominator = denominator;
}
public int getNumerator() {
return this.numerator;
}
public int getDenominator() {
return this.denominator;
}
}
/* Test.java */
public class Test {
public static void main(String[] args) {
Rational r1 = new Rational(2, 4);
Rational r2 = new Rational(1, 2);
System.out.println(r1.add(r2));
System.out.println(r1.subtract(r2));
System.out.println(r2.times(new Rational(1,2)));
System.out.println(r2);
}
}
실행 결과
1/1
0/1
1/4
1/2
2024.08.27 - [Java] - [Java] 07. 객체지향 프로그래밍 기본
[Java] 07. 객체지향 프로그래밍 기본
Chapter 1: 클래스(Class)와 객체(Object)클래스(Class)객체(Object)추상화(Abstraction) Chapter 2: 캡슐화(Encapsulation)데이터와 메소드의 결합접근 가시성 제어왜 캡슐화를 해야 하는가?객체 데이터정적 메소드
lightningtech.tistory.com
출처: https://github.com/gikpreet/class-programming_with_java/tree/master
GitHub - gikpreet/class-programming_with_java
Contribute to gikpreet/class-programming_with_java development by creating an account on GitHub.
github.com
'Java > Java 연습 문제' 카테고리의 다른 글
[Java 연습 문제] String Sort (with Bubble Sort) (0) | 2024.09.01 |
---|---|
[Java 연습 문제] 상속을 사용하여 인터페이스 구현 (0) | 2024.08.31 |
[Java 연습 문제] 텍스트 파일의 소문자 복사본 생성 (0) | 2024.08.30 |
[Java 연습 문제] Text file 입출력 (0) | 2024.08.29 |
[Java 연습 문제] 은행 계좌 문제 (0) | 2024.08.27 |