#include #include class Rational { public: Rational(int a = 0, int b = 1) : m_a(a), m_b(b) {} Rational operator +(const Rational &r) const; Rational operator +(int a) const; Rational operator -(const Rational &r) const; Rational operator -(int a) const; Rational operator *(const Rational &r) const; Rational operator /(const Rational &r) const; Rational operator *(int a) const; Rational operator /(int a) const; bool operator <(const Rational &r) const; bool operator >(const Rational &r) const; bool operator <=(const Rational &r) const; bool operator >=(const Rational &r) const; bool operator ==(const Rational &r) const; bool operator !=(const Rational &r) const; void Simplify() { int divisor = gcd(m_a, m_b); if (divisor) { m_a /= divisor; m_b /= divisor; } else m_b = 1; } void Disp() const { if (m_b != 1) printf("%d/%d\n", m_a, m_b); else printf("%d\n", m_a); } static int gcd(int a, int b); private: int m_a, m_b; }; int Rational::gcd(int a, int b) { int min = a < b ? abs(a) : abs(b); for (int i = min; i > 0; --i) if (a % i == 0 && b % i == 0) break; return i; } Rational Rational::operator *(const Rational &r) const { Rational result; result.m_a = m_a * r.m_a; result.m_b = m_b * r.m_b; result.Simplify(); return result; } Rational Rational::operator *(int a) const { Rational result; result.m_a = m_a * a; result.m_b = m_b; result.Simplify(); return result; } Rational Rational::operator /(const Rational &r) const { Rational result; result.m_a = m_a * r.m_b; result.m_b = m_b * r.m_a; result.Simplify(); return result; } Rational Rational::operator /(int a) const { Rational result; result.m_a = m_a; result.m_b = m_b * a; result.Simplify(); return result; } Rational Rational::operator +(const Rational &r) const { Rational result; result.m_a = m_a * r.m_b + m_b * r.m_a; result.m_b = m_b * r.m_b; result.Simplify(); return result; } Rational Rational::operator +(int a) const { Rational result; result.m_a = m_b * a + m_a; result.m_b = m_b; result.Simplify(); return result; } Rational Rational::operator -(const Rational &r) const { Rational result; result.m_a = m_a * r.m_b - m_b * r.m_a; result.m_b = m_b * r.m_b; result.Simplify(); return result; } Rational Rational::operator -(int a) const { Rational result; result.m_a = m_a - m_b * a; result.m_b = m_b; result.Simplify(); return result; } bool Rational::operator <(const Rational &r) const { Rational a = *this; Rational b = r; a.Simplify(); b.Simplify(); return (double) a.m_a / a.m_b < (double) b.m_a / b.m_b; } bool Rational::operator >(const Rational &r) const { Rational a = *this; Rational b = r; a.Simplify(); b.Simplify(); return (double) a.m_a / a.m_b > (double) b.m_a / b.m_b; } bool Rational::operator <=(const Rational &r) const { Rational a = *this; Rational b = r; a.Simplify(); b.Simplify(); return (double) a.m_a / a.m_b <= (double) b.m_a / b.m_b; } bool Rational::operator >=(const Rational &r) const { Rational a = *this; Rational b = r; a.Simplify(); b.Simplify(); return (double) a.m_a / a.m_b >= (double) b.m_a / b.m_b; } bool Rational::operator ==(const Rational &r) const { Rational a = *this; Rational b = r; a.Simplify(); b.Simplify(); return (double) a.m_a / a.m_b == (double) b.m_a / b.m_b; } bool Rational::operator !=(const Rational &r) const { Rational a = *this; Rational b = r; a.Simplify(); b.Simplify(); return (double) a.m_a / a.m_b != (double) b.m_a / b.m_b; } int main(void) { Rational a(1, 6), b(1, 3), c(1, 2), d; if (b / 2 == a) printf("Evet\n"); else printf("Hayir\n"); // d.Disp(); return 0; }