#include #include #include #include using namespace std; class Rational { public: Rational() = default; Rational(int numerator) : numerator_(numerator) , denominator_(1) { } Rational(int numerator, int denominator) : numerator_(numerator) , denominator_(denominator) { Normalize(); } int Numerator() const { return numerator_; } int Denominator() const { return denominator_; } private: void Normalize() { if (denominator_ < 0) { numerator_ = -numerator_; denominator_ = -denominator_; } const int divisor = gcd(numerator_, denominator_); numerator_ /= divisor; denominator_ /= divisor; } int numerator_ = 0; int denominator_ = 1; }; ostream& operator<<(ostream& out, Rational& value) { out << value.Numerator() << "/"s << value.Denominator(); return out; } istream& operator>>(istream& in, Rational& value) { int numerator, denominator; char slash; in >> numerator >> slash >> denominator; value = Rational{ numerator, denominator }; return in; }