#include "Rational.h" using namespace std; Rational::Rational(const int& num,const int& denom) :numerator(num), denominator(denom){ reduce(); } int Rational::getDenominator() const{ return denominator; } int Rational::getNumerator() const{ return numerator; } void Rational::reduce(){ int sign = 1; if (numerator < 0){ sign = -1; numerator = -numerator; } if (denominator < 0){ sign = -1; denominator = -denominator; } int gcd = numerator; int d = denominator; while (d != 0){ int temp = gcd % d; gcd = d; d = temp; } numerator /= gcd; numerator *= sign; denominator /= gcd; } const Rational& Rational::operator+=(const Rational& rat){ numerator = numerator * rat.denominator + rat.numerator * denominator; denominator = rat.denominator * denominator; reduce(); return *this; } const Rational& Rational::operator+() const{ return *this; } const Rational Rational::operator+(const Rational& rat) const{ Rational temp = *this; temp += rat; return temp; } const Rational operator+(int lhs, const Rational& rhs){ Rational temp(lhs); return rhs + temp; } const Rational operator+(const Rational& lhs, int rhs){ return rhs + lhs; } const Rational& Rational::operator++(){ Rational temp(1); *this += temp; return *this; } const Rational Rational::operator++(int){ Rational temp = *this; Rational temp2(1); *this += temp2; return temp; } const Rational& Rational::operator-=(const Rational& rat){ numerator = numerator * rat.denominator - rat.numerator * denominator; denominator = rat.denominator * denominator; reduce(); return *this; } const Rational Rational::operator-() const{ Rational temp = *this; temp.numerator *= -1; return temp; } const Rational Rational::operator-(const Rational& rat) const{ Rational temp = *this; temp -= rat; return temp; } const Rational operator-(int lhs, const Rational& rhs){ return -rhs + lhs; } const Rational operator-(const Rational& lhs, int rhs){ return -rhs + lhs; } const Rational& Rational::operator--(){ Rational temp(1); *this -= temp; return *this; } const Rational Rational::operator--(int){ Rational temp = *this; Rational temp2(1); *this -= temp2; return temp; } const Rational& Rational::operator*=(const Rational& rat){ numerator = numerator * rat.numerator; denominator = denominator * rat.denominator; reduce(); return *this; } const Rational Rational::operator*(const Rational& rat) const{ Rational temp = *this; temp *= rat; return temp; } const Rational operator*(int lhs, const Rational& rhs){ Rational temp(lhs); return rhs * temp; } const Rational operator*(const Rational& lhs, int rhs){ return rhs * lhs; } const Rational& Rational::operator/=(const Rational& rat){ numerator = numerator * rat.denominator; denominator = denominator * rat.numerator; reduce(); return *this; } const Rational Rational::operator/(const Rational& rat) const{ Rational temp = *this; temp /= rat; return temp; } const Rational operator/(int lhs, const Rational& rhs){ Rational temp(lhs); return temp / rhs; } const Rational operator/(const Rational& lhs, int rhs){ Rational temp(rhs); return lhs / temp; } bool operator==(const Rational& lhs, const Rational& rhs){ return static_cast(lhs) == static_cast(rhs); } bool operator<(const Rational& lhs, const Rational& rhs){ return static_cast(lhs) < static_cast(rhs); } ostream& operator<<(ostream& os, const Rational& rat){ return os << rat.getNumerator() << "/" << rat.getDenominator(); }