Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.49 KB | None | 0 0
  1. #include <numeric>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. class Rational {
  7. private:
  8.     int a, b;
  9.  
  10. public:
  11.     Rational(int numerator = 0, int denominator = 1) :
  12.             a(numerator), b(denominator) {}
  13.  
  14.     int numerator() const {
  15.         return (static_cast<double>(a) / b > 0) ? abs(a) / gcd(a, b) : -abs(a) / gcd(a, b);
  16.     }
  17.  
  18.     int denominator() const {
  19.         return (b > 0) ? b / gcd(a, b) : -b / gcd(a, b);
  20.     }
  21.  
  22.     Rational operator+() const {
  23.         return *this;
  24.     }
  25.  
  26.     Rational operator-() const {
  27.         return {-a, b};
  28.     }
  29.  
  30.     bool operator==(const Rational &num) const {
  31.         return numerator() == num.numerator() && denominator() == num.denominator();
  32.     }
  33.  
  34.     bool operator!=(const Rational &num) const {
  35.         return numerator() != num.numerator() || denominator() != num.denominator();
  36.     }
  37.  
  38.     Rational &operator+=(const Rational &num) {
  39.         a = a * num.denominator() + num.numerator() * b;
  40.         b *= num.denominator();
  41.         return *this;
  42.     }
  43.  
  44.     Rational &operator-=(const Rational &num) {
  45.         a = a * num.denominator() - num.numerator() * b;
  46.         b *= num.denominator();
  47.         return *this;
  48.     }
  49.  
  50.     Rational &operator*=(const Rational &num) {
  51.         a *= num.numerator();
  52.         b *= num.denominator();
  53.         return *this;
  54.     }
  55.  
  56.     Rational &operator/=(const Rational &num) {
  57.         a *= num.denominator();
  58.         b *= num.numerator();
  59.         return *this;
  60.     }
  61.  
  62.     Rational operator++(int) {
  63.         auto c = *this;
  64.         a += b;
  65.         return c;
  66.     }
  67.  
  68.     Rational &operator++() {
  69.         a += b;
  70.         return *this;
  71.     }
  72.  
  73.     Rational operator--(int) {
  74.         auto c = *this;
  75.         a -= b;
  76.         return c;
  77.     }
  78.  
  79.     Rational &operator--() {
  80.         a -= b;
  81.         return *this;
  82.     }
  83. };
  84.  
  85. Rational operator+(const Rational &a, const Rational &b) {
  86.     return {a.numerator() * b.denominator() + b.numerator() * a.denominator(),
  87.             a.denominator() * b.denominator()};
  88. }
  89.  
  90. Rational operator-(const Rational &a, const Rational &b) {
  91.     return {a.numerator() * b.denominator() - b.numerator() * a.denominator(),
  92.             a.denominator() * b.denominator()};
  93. }
  94.  
  95. Rational operator*(const Rational &a, const Rational &b) {
  96.     return {a.numerator() * b.numerator(), a.denominator() * b.denominator()};
  97. }
  98.  
  99. Rational operator/(const Rational &a, const Rational &b) {
  100.     return {a.numerator() * b.denominator(), a.denominator() * b.numerator()};
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement