importjava.math.BigInteger;publicclassFraction {
BigInteger numerator, denominator, gcd;voidset(String n, String d) {
numerator=newBigInteger(n);
denominator=newBigInteger(d);
}voidsimplify() {
gcd=numerator.gcd(denominator);
numerator=numerator.divide(gcd);
denominator=denominator.divide(gcd);if(denominator.compareTo(BigInteger.ZERO)<0) {
numerator=numerator.negate();
denominator=denominator.negate();
}
}intcompareTo(Fraction y) {
Fraction z=this.subtract(y);returnz.numerator.compareTo(BigInteger.ZERO);
}
Fraction abs() {
Fraction z=newFraction();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;
}returnz;
}
Fraction negate() {
Fraction z=this;
z.numerator=z.numerator.negate();returnz;
}booleanzero() {returnnumerator.compareTo(BigInteger.ZERO)==0;
}
Fraction add(Fraction y) {
Fraction z=newFraction();
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();returnz;
}
Fraction subtract(Fraction y) {
Fraction z=newFraction();
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();returnz;
}
Fraction multiply(Fraction y) {
Fraction z=newFraction();
z.numerator=numerator.multiply(y.numerator);
z.denominator=denominator.multiply(y.denominator);
z.simplify();returnz;
}
Fraction divide(Fraction y) {
Fraction z=newFraction();
z.numerator=numerator.multiply(y.denominator);
z.denominator=denominator.multiply(y.numerator);
z.simplify();returnz;
}voidprint() {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();
}