Advertisement
kutuzzzov

Урок 2

Sep 19th, 2022 (edited)
456
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.23 KB | None | 0 0
  1. #include <numeric>
  2. #include <ostream>
  3. #include <vector>
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. class Rational {
  9. public:
  10.     Rational() = default;
  11.  
  12.     Rational(int numerator)
  13.         : numerator_(numerator)
  14.         , denominator_(1) {
  15.     }
  16.  
  17.     Rational(int numerator, int denominator)
  18.         : numerator_(numerator)
  19.         , denominator_(denominator) {
  20.         Normalize();
  21.     }
  22.  
  23.     int Numerator() const {
  24.         return numerator_;
  25.     }
  26.  
  27.     int Denominator() const {
  28.         return denominator_;
  29.     }
  30.  
  31.  
  32. private:
  33.     void Normalize() {
  34.         if (denominator_ < 0) {
  35.             numerator_ = -numerator_;
  36.             denominator_ = -denominator_;
  37.         }
  38.         const int divisor = gcd(numerator_, denominator_);
  39.         numerator_ /= divisor;
  40.         denominator_ /= divisor;
  41.     }
  42.  
  43.     int numerator_ = 0;
  44.     int denominator_ = 1;
  45. };
  46.  
  47. ostream& operator<<(ostream& out, Rational& value) {
  48.     out << value.Numerator() << "/"s << value.Denominator();
  49.     return out;
  50. }
  51.  
  52. istream& operator>>(istream& in, Rational& value) {
  53.     int numerator, denominator;
  54.     char slash;
  55.     in >> numerator >> slash >> denominator;
  56.     value = Rational{ numerator, denominator };
  57.     return in;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement