Fraction {

    BigInteger numerator, denominator, gcd;

    void set(String n, String d) {
        numerator 
= new BigInteger(n);
        denominator 
= new BigInteger(d);
    }

    
void simplify() {
        gcd 
= numerator.gcd(denominator);
        numerator 
= numerator.divide(gcd);
        denominator 
= denominator.divide(gcd);
        
if (denominator.compareTo(BigInteger.ZERO) < 0) {
            numerator 
= numerator.negate();
            denominator 
= denominator.negate();
        }
    }

    
int compareTo(Fraction y) {
        Fraction z 
= this.subtract(y);
        
return z.numerator.compareTo(BigInteger.ZERO);
    }

    Fraction abs() {
        Fraction z 
= new Fraction();
        
if (numerator.compareTo(BigInteger.ZERO) < 0) {
            z.numerator 
= numerator.negate();
        } 
else {
            z.numerator 
= numerator;
        }
        
if (denominator.compareTo(BigInteger.ZERO) < 0) {
            z.denominator 
= denominator.negate();
        } 
else {
            z.denominator 
= denominator;
        }
        
return z;
    }

    Fraction negate() {
        Fraction z 
= this;
        z.numerator 
= z.numerator.negate();
        
return z;
    }

    
boolean zero() {
        
return numerator.compareTo(BigInteger.ZERO) == 0;
    }

    Fraction add(Fraction y) {
        Fraction z 
= new Fraction();
        gcd 
= denominator.gcd(y.denominator);
        z.denominator 
= denominator.multiply(y.denominator).divide(gcd);
        z.numerator 
= numerator.multiply(z.denominator.divide(denominator)).add(y.numerator.multiply(z.denominator.divide(y.denominator)));
        z.simplify();
        
return z;
    }

    Fraction subtract(Fraction y) {
        Fraction z 
= new Fraction();
        gcd 
= denominator.gcd(y.denominator);
        z.denominator 
= denominator.multiply(y.denominator).divide(gcd);
        z.numerator 
= numerator.multiply(z.denominator.divide(denominator)).subtract(y.numerator.multiply(z.denominator.divide(y.denominator)));
        z.simplify();
        
return z;
    }

    Fraction multiply(Fraction y) {
        Fraction z 
= new Fraction();
        z.numerator 
= numerator.multiply(y.numerator);
        z.denominator 
= denominator.multiply(y.denominator);
        z.simplify();
        
return z;
    }

    Fraction divide(Fraction y) {
        Fraction z 
= new Fraction();
        z.numerator 
= numerator.multiply(y.denominator);
        z.denominator 
= denominator.multiply(y.numerator);
        z.simplify();
        
return z;
    }

    
void print() {
        
if (denominator.compareTo(BigInteger.ONE) != 0) {
            System.out.printf(
"%s/%s", numerator.toString(), denominator.toString());
        } 
else {
            System.out.printf(
"%s", numerator.toString());
        }
        System.out.println();
    }

相关文章:

  • 2022-12-23
  • 2021-06-21
  • 2021-07-08
  • 2021-11-02
  • 2021-12-15
  • 2021-06-04
  • 2022-12-23
猜你喜欢
  • 2021-08-09
  • 2021-05-05
  • 2021-12-05
  • 2022-12-23
  • 2022-01-07
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案