分數運算

struct Fraction {
    int b, a; // b/a

    bool operator<(const Fraction &rhs) const {
        return b * rhs < a * rhs;
    }
    Fraction operator+(const Fraction &rhs) const {
        Fraction ret;
        ret.b = b * rhs.a + rhs.b * a;
        ret.a = a * rhs.a;
        int d = __gcd (ret.a, ret.b);
        ret.a /= d, ret.b /= d;
        return ret;
    }
    Fraction operator*(const Fraction &rhs) const {
        int d1 = __gcd (b, rhs.a);
        int d2 = __gcd (a, rhs.b);

        Fraction ret;

        ret.b = b / d1 * rhs.b / d2;
        ret.a = a / d1 * rhs.a / d2;
        return ret;
    }
}