Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- int gcd(int a, int b) {
- if (b == 0)
- return a;
- else
- return gcd (b, a % b);
- }
- class Rational {
- private:
- int num, den;
- public:
- Rational(int n, int d) {
- num = 0;
- den = 1;
- int gcdd = gcd(n, d);
- n /= gcdd;
- d /= gcdd;
- if (d < 0) {
- n *= -1;
- d *= -1;
- }
- num = n;
- den = d;
- }
- Rational(int n) {
- num = n;
- den = 1;
- }
- int numerator() const {
- return num;
- }
- int denominator() const {
- return den;
- }
- Rational operator + (const Rational& r) {
- return Rational (num * r.den + den * r.num, den * r.den);
- }
- Rational operator + (const int& i) {
- return Rational (num + den * i, den);
- }
- Rational operator - (const Rational& r) {
- return Rational (num * r.den - den * r.num, den * r.den);
- }
- Rational operator - (const int& i) {
- return Rational (num - den * i, den);
- }
- Rational operator * (const Rational& r) {
- return Rational (num * r.num, den * r.den);
- }
- Rational operator * (const int& i) {
- return Rational (num * i, den);
- }
- Rational operator / (const Rational& r) {
- return Rational (num * r.den, den * r.num);
- }
- Rational operator / (const int& i) {
- return Rational (num, den * i);
- }
- Rational operator + () {
- return Rational (num, den);
- }
- Rational operator - () {
- return Rational (-num, -den);
- }
- Rational operator += (const Rational& r) {
- num = num * r.den + den * r.num;
- den = den * r.den;
- int gcdd = gcd(num, den);
- num /= gcdd;
- den /= gcdd;
- if (den < 0) {
- num *= -1;
- den *= -1;
- }
- return *this;
- }
- Rational operator -= (const Rational& r) {
- num = num * r.den - den * r.num;
- den = den * r.den;
- int gcdd = gcd(num, den);
- num /= gcdd;
- den /= gcdd;
- if (den < 0) {
- num *= -1;
- den *= -1;
- }
- return *this;
- }
- Rational operator *= (const Rational& r) {
- num = num * r.num;
- den = den * r.den;
- int gcdd = gcd(num, den);
- num /= gcdd;
- den /= gcdd;
- if (den < 0) {
- num *= -1;
- den *= -1;
- }
- return *this;
- }
- Rational operator /= (const Rational& r) {
- num = num * r.den;
- den = den * r.num;
- int gcdd = gcd(num, den);
- num /= gcdd;
- den /= gcdd;
- if (den < 0) {
- num *= -1;
- den *= -1;
- }
- return *this;
- }
- bool operator == (const Rational& r) {
- return (num == r.num && den == r.den);
- }
- bool operator != (const Rational& r) {
- return (num != r.num || den != r.den);
- }
- Rational operator++ () {
- num = num + den;
- int gcdd = gcd(num, den);
- num /= gcdd;
- den /= gcdd;
- if (den < 0) {
- num *= -1;
- den *= -1;
- }
- return *this;
- }
- Rational operator-- () {
- num = num + den;
- int gcdd = gcd(num, den);
- num /= gcdd;
- den /= gcdd;
- if (den < 0) {
- num *= -1;
- den *= -1;
- }
- return *this;
- }
- Rational operator++ (int) {
- Rational temp(*this);
- num = num + den;
- int gcdd = gcd(num, den);
- num /= gcdd;
- den /= gcdd;
- if (den < 0) {
- num *= -1;
- den *= -1;
- }
- return temp;
- }
- Rational operator-- (int) {
- Rational temp(*this);
- num = num - den;
- int gcdd = gcd(num, den);
- num /= gcdd;
- den /= gcdd;
- if (den < 0) {
- num *= -1;
- den *= -1;
- }
- return temp;
- }
- };
- Rational operator * (const int& i, const Rational& r) {
- return Rational(r.numerator() * i, r.denominator());
- }
- Rational operator / (const int& i, const Rational& r) {
- return Rational(r.denominator() * i, r.numerator());
- }
- Rational operator + (const int& i, const Rational& r) {
- return Rational(r.numerator() + r.denominator() * i, r.denominator());
- }
- Rational operator - (const int& i, const Rational& r) {
- return Rational(r.denominator() * i - r.numerator(), r.denominator());
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement