Java/Java 연습 문제

[Java 연습 문제] 분수 계산(덧셈, 뺄셈, 곱셈) 코드

Joo.v7 2024. 8. 27. 21:25

유클리드 호제법(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