public class Fraction {

    private int num, denom;
    
    public Fraction(int n, int d) {
        this.num = n;
        this.denom = (d==0)?1:d;
        this.normalise();
    }

    private void normalise() {
        if (this.denom < 0) {
            this.num = -this.num;
            this.denom = -this.denom;
        }
        int a = (this.num<0)?-this.num:this.num;
        int b = this.denom;
        while (a != 0) {
            if (a <= b) {
                b -= a;
            } else {
                int c = a;
                a = b;
                b = c;
            }
        }
        this.num /= b;
        this.denom /= b;
    }

    public boolean egale(Fraction f) {
        return this.num*f.denom == f.num*this.denom;
    }

    public int compareTo(Fraction f) {
        return this.num*f.denom - f.num*this.denom;
    }

    public Fraction add(Fraction f) {
        return new Fraction(this.num*f.denom + f.num*this.denom, this.denom*f.denom);
    }
    public Fraction mul(Fraction f) {
        return new Fraction(this.num * f.num, this.denom * f.denom);
    }

    public String toString() {
        if (this.denom == 1) return this.num + "";
        if (this.denom == -1) return (-this.num) + "";
        if (this.denom < 0)  return (-this.num) + " / " + (-this.denom);
        return this.num + " / " + this.denom;
    }

    public static void main(String[] args) {
        Fraction f1 = new Fraction(3, 2);
        Fraction f2 = new Fraction(12, -8);
        System.out.println(f1);
        System.out.println(f2);
        Fraction f3 = f1.add(f2);
        System.out.println(f3);
        Fraction f4 = new Fraction(3, 4);
        Fraction f5 = new Fraction(2, 3);
        System.out.println(f4.compareTo(f5));
    }
}
