#include <iostream>
using namespace std;
class Rational {
int p;
int q;
public:
Rational (int d=0, int n=1) : p{d}, q{n} { }
Rational operator*(const Rational& r) const { // for curent object * r
return Rational(p*r.p,q*r.q);
}
int numerator() const {return p; }
int denominator() const { return q; }
};
Rational operator+(const Rational &a, const Rational &b) {
return Rational(a.numerator()*b.denominator()+b.numerator()*a.denominator(),
a.denominator()*b.denominator());
}
ostream& operator<<(ostream& os, const Rational &r) {
return os << " ("<<r.numerator()<<"/"<<r.denominator()<<") ";
}
int main() {
Rational two{2};
Rational quarter{1,4};
cout << two<<endl;
cout << quarter<<endl;
cout << quarter*2 <<endl;
cout << quarter*two <<endl;
cout << quarter*two+quarter <<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgUmF0aW9uYWwgewogICAgaW50IHA7IAogICAgaW50IHE7IApwdWJsaWM6ICAKICAgIFJhdGlvbmFsIChpbnQgZD0wLCBpbnQgbj0xKSA6IHB7ZH0sIHF7bn0geyB9IAogICAgUmF0aW9uYWwgb3BlcmF0b3IqKGNvbnN0IFJhdGlvbmFsJiByKSBjb25zdCB7ICAgIC8vIGZvciBjdXJlbnQgb2JqZWN0ICogcgogICAgCXJldHVybiBSYXRpb25hbChwKnIucCxxKnIucSk7IAogICAgfQogICAgaW50IG51bWVyYXRvcigpIGNvbnN0IHtyZXR1cm4gcDsgfQogICAgaW50IGRlbm9taW5hdG9yKCkgY29uc3QgeyByZXR1cm4gcTsgfSAKfTsgClJhdGlvbmFsIG9wZXJhdG9yKyhjb25zdCBSYXRpb25hbCAmYSwgY29uc3QgUmF0aW9uYWwgJmIpIHsKCXJldHVybiBSYXRpb25hbChhLm51bWVyYXRvcigpKmIuZGVub21pbmF0b3IoKStiLm51bWVyYXRvcigpKmEuZGVub21pbmF0b3IoKSwKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5kZW5vbWluYXRvcigpKmIuZGVub21pbmF0b3IoKSk7Cn0Kb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvcywgY29uc3QgUmF0aW9uYWwgJnIpIHsKCXJldHVybiBvcyA8PCAiICgiPDxyLm51bWVyYXRvcigpPDwiLyI8PHIuZGVub21pbmF0b3IoKTw8IikgIjsKfQoKCmludCBtYWluKCkgewoJUmF0aW9uYWwgdHdvezJ9OyAKCVJhdGlvbmFsIHF1YXJ0ZXJ7MSw0fTsgCgljb3V0IDw8IHR3bzw8ZW5kbDsgCgljb3V0IDw8IHF1YXJ0ZXI8PGVuZGw7IAoJY291dCA8PCBxdWFydGVyKjIgPDxlbmRsOyAKCWNvdXQgPDwgcXVhcnRlcip0d28gPDxlbmRsOyAKCWNvdXQgPDwgcXVhcnRlcip0d28rcXVhcnRlciA8PGVuZGw7IAoJcmV0dXJuIDA7Cn0=