Advertisement
MathQ_

Untitled

Aug 20th, 2021
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.13 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. class Rational {
  6. public:
  7.     int n, m;
  8.  
  9.     Rational() {
  10.         n = 0;
  11.         m = 1;
  12.     }
  13.  
  14.     Rational(const int _n) {
  15.         n = _n;
  16.         m = 1;
  17.     }
  18.  
  19.     Rational(const int _n, const int _m) {
  20.         n = _n;
  21.         m = _m;
  22.         if (m < 0) {
  23.             m *= -1;
  24.             n *= -1;
  25.         }
  26.         cut();
  27.     }
  28.  
  29.     Rational(const Rational &frac) {
  30.         n = frac.n;
  31.         m = frac.m;
  32.     }
  33.  
  34.     void cut() {
  35.         int g = gcd(n, m);
  36.         n /= g;
  37.         m /= g;
  38.     }
  39.  
  40.     int numerator() const {
  41.         return n;
  42.     }
  43.  
  44.     int denominator() const {
  45.         return m;
  46.     }
  47.    
  48.     Rational operator+(const Rational v) const {
  49.         int num = n * v.m + m * v.n;
  50.         int dem = m * v.m;
  51.         return Rational(num, dem);
  52.     }
  53.    
  54.     Rational operator-(const Rational v) const {
  55.         int num = n * v.m - m * v.n;
  56.         int dem = m * v.m;
  57.         return Rational(num, dem);
  58.     }
  59.  
  60.     Rational operator*(const Rational v) const {
  61.         int num = n * v.n;
  62.         int dem = m * v.m;
  63.         return Rational(num, dem);
  64.     }
  65.  
  66.     Rational operator/(const Rational v) const {
  67.         int num = n * v.m;
  68.         int dem = m * v.n;
  69.         return Rational(num, dem);
  70.     }
  71.  
  72.     void operator=(const Rational v) {
  73.         n = v.n; m = v.m;
  74.         cut();
  75.     }
  76.  
  77.     void operator+=(const Rational v) {
  78.         n = n * v.m + m * v.n;
  79.         m *= v.m;
  80.         cut();
  81.     }
  82.     void operator-=(const Rational v) {
  83.         n = n * v.m - m * v.n;
  84.         m *= v.m;
  85.         cut();
  86.     }
  87.     void operator*=(const Rational v) {
  88.         n *= v.n;
  89.         m *= v.m;
  90.         cut();
  91.     }
  92.     void operator/=(const Rational v) {
  93.         n *= v.m;
  94.         m *= v.n;
  95.         if (m < 0) {
  96.             m *= -1;
  97.             n *= -1;
  98.         }
  99.         cut();
  100.     }
  101.     bool operator==(Rational v) const {
  102.         return n == v.n && m == v.m;
  103.     }
  104.     bool operator!=(Rational v) const {
  105.         return n != v.n || m != v.m;
  106.     }
  107.     Rational& operator++() {
  108.         n += m; cut();
  109.         return *this;
  110.     }
  111.     Rational operator++(const int x) {
  112.         Rational res = *this;
  113.         n += m; cut();
  114.         return res;
  115.     }
  116.     Rational& operator--() {
  117.         n -= m; cut();
  118.         return *this;
  119.     }
  120.     Rational operator--(const int x) {
  121.         Rational res = *this;
  122.         n -= m; cut();
  123.         return res;
  124.     }
  125.     Rational operator+() const {
  126.         return Rational(n, m);
  127.     }
  128.  
  129.     Rational operator-() const {
  130.         return Rational(-n, m);
  131.     }
  132.  
  133.     void operator=(const int v) {
  134.         n = v; m = 1;
  135.     }
  136.     void operator+=(const int v) {
  137.         n += m * v;
  138.         cut();
  139.     }
  140.     void operator-=(const int v) {
  141.         n -= m * v;
  142.         cut();
  143.     }
  144.     void operator*=(const int v) {
  145.         n *= v;
  146.         cut();
  147.     }
  148.     void operator/=(const int v) {
  149.         m *= v;
  150.         if (m < 0) {
  151.             m *= -1;
  152.             n *= -1;
  153.         }
  154.         cut();
  155.     }
  156. };
  157.  
  158. Rational operator+(const Rational u, const int v) {
  159.     int num = u.n + u.m * v;
  160.     int dem = u.m;
  161.     return Rational(num, dem);
  162. }
  163.  
  164. Rational operator-(const Rational u, const int v) {
  165.     int num = u.n - u.m * v;
  166.     int dem = u.m;
  167.     return Rational(num, dem);
  168. }
  169.  
  170. Rational operator*(const Rational u, const int v) {
  171.     int num = u.n * v;
  172.     int dem = u.m;
  173.     return Rational(num, dem);
  174. }
  175.  
  176. Rational operator/(const Rational u, const int v) {
  177.     int num = u.n;
  178.     int dem = u.m * v;
  179.     return Rational(num, dem);
  180. }
  181.  
  182. Rational operator+(const int v, const Rational u) {
  183.     int num = u.n + u.m * v;
  184.     int dem = u.m;
  185.     return Rational(num, dem);
  186. }
  187.  
  188. Rational operator-(const int v, const Rational u) {
  189.     int num = u.n - u.m * v;
  190.     int dem = u.m;
  191.     return Rational(num, dem);
  192. }
  193.  
  194. Rational operator*(const int v, const Rational u) {
  195.     int num = u.n * v;
  196.     int dem = u.m;
  197.     return Rational(num, dem);
  198. }
  199.  
  200. Rational operator/(const int v, const Rational u) {
  201.     int num = u.n;
  202.     int dem = u.m * v;
  203.     return Rational(num, dem);
  204. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement