35657

Untitled

May 29th, 2023
861
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Rational {
  6. public:
  7.     Rational() : numerator_(0), denominator_(1) {}
  8.  
  9.     explicit Rational(int value) : numerator_(value), denominator_(1) {}
  10.  
  11.     Rational(int numerator, int denominator) : numerator_(numerator), denominator_(denominator) {
  12.         Reduction();
  13.     }
  14.  
  15.     int Numerator() const {
  16.         return numerator_;
  17.     }
  18.  
  19.     int Denominator() const {
  20.         return denominator_;
  21.     }
  22.  
  23.  
  24.     void Addition(const Rational& right) {
  25.         numerator_ = numerator_ * right.denominator_ + right.numerator_ * denominator_;
  26.         denominator_ *= right.denominator_;
  27.         Reduction();
  28.     }
  29.  
  30.     /* Аналогично:
  31.     Subtraction
  32.     Division
  33.     Multiplication */
  34.  
  35. private:
  36.     void Reduction() {
  37.         if (denominator_ < 0) {
  38.             numerator_ = -numerator_;
  39.             denominator_ = -denominator_;
  40.         }
  41.         int x = numerator_ < 0 ? -numerator_ : numerator_;
  42.         int y = denominator_ < 0 ? -denominator_ : denominator_;
  43.         while (x != y) {
  44.             if (x > y) {
  45.                 x = x - y;
  46.             }
  47.             else {
  48.                 y = y - x;
  49.             }
  50.         }
  51.         numerator_ /= x;
  52.         denominator_ /= x;
  53.     }
  54.  
  55.     int numerator_;
  56.     int denominator_;
  57. };
  58.  
  59.  
  60.  
  61. int main() {
  62.     Rational r1(1, 2);
  63.     Rational r2(3, 4);
  64.     r1.Addition(r2);
  65.     cout << r1.Numerator() << '/' << r1.Denominator() << endl;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment