Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- class Rational {
- public:
- int n, m;
- Rational() {
- n = 0;
- m = 1;
- }
- Rational(const int _n) {
- n = _n;
- m = 1;
- }
- Rational(const int _n, const int _m) {
- n = _n;
- m = _m;
- if (m < 0) {
- m *= -1;
- n *= -1;
- }
- cut();
- }
- Rational(const Rational &frac) {
- n = frac.n;
- m = frac.m;
- }
- void cut() {
- int g = gcd(n, m);
- n /= g;
- m /= g;
- }
- int numerator() const {
- return n;
- }
- int denominator() const {
- return m;
- }
- Rational operator+(const Rational v) const {
- int num = n * v.m + m * v.n;
- int dem = m * v.m;
- return Rational(num, dem);
- }
- Rational operator-(const Rational v) const {
- int num = n * v.m - m * v.n;
- int dem = m * v.m;
- return Rational(num, dem);
- }
- Rational operator*(const Rational v) const {
- int num = n * v.n;
- int dem = m * v.m;
- return Rational(num, dem);
- }
- Rational operator/(const Rational v) const {
- int num = n * v.m;
- int dem = m * v.n;
- return Rational(num, dem);
- }
- void operator=(const Rational v) {
- n = v.n; m = v.m;
- cut();
- }
- void operator+=(const Rational v) {
- n = n * v.m + m * v.n;
- m *= v.m;
- cut();
- }
- void operator-=(const Rational v) {
- n = n * v.m - m * v.n;
- m *= v.m;
- cut();
- }
- void operator*=(const Rational v) {
- n *= v.n;
- m *= v.m;
- cut();
- }
- void operator/=(const Rational v) {
- n *= v.m;
- m *= v.n;
- if (m < 0) {
- m *= -1;
- n *= -1;
- }
- cut();
- }
- bool operator==(Rational v) const {
- return n == v.n && m == v.m;
- }
- bool operator!=(Rational v) const {
- return n != v.n || m != v.m;
- }
- Rational& operator++() {
- n += m; cut();
- return *this;
- }
- Rational operator++(const int x) {
- Rational res = *this;
- n += m; cut();
- return res;
- }
- Rational& operator--() {
- n -= m; cut();
- return *this;
- }
- Rational operator--(const int x) {
- Rational res = *this;
- n -= m; cut();
- return res;
- }
- Rational operator+() const {
- return Rational(n, m);
- }
- Rational operator-() const {
- return Rational(-n, m);
- }
- void operator=(const int v) {
- n = v; m = 1;
- }
- void operator+=(const int v) {
- n += m * v;
- cut();
- }
- void operator-=(const int v) {
- n -= m * v;
- cut();
- }
- void operator*=(const int v) {
- n *= v;
- cut();
- }
- void operator/=(const int v) {
- m *= v;
- if (m < 0) {
- m *= -1;
- n *= -1;
- }
- cut();
- }
- };
- Rational operator+(const Rational u, const int v) {
- int num = u.n + u.m * v;
- int dem = u.m;
- return Rational(num, dem);
- }
- Rational operator-(const Rational u, const int v) {
- int num = u.n - u.m * v;
- int dem = u.m;
- return Rational(num, dem);
- }
- Rational operator*(const Rational u, const int v) {
- int num = u.n * v;
- int dem = u.m;
- return Rational(num, dem);
- }
- Rational operator/(const Rational u, const int v) {
- int num = u.n;
- int dem = u.m * v;
- return Rational(num, dem);
- }
- Rational operator+(const int v, const Rational u) {
- int num = u.n + u.m * v;
- int dem = u.m;
- return Rational(num, dem);
- }
- Rational operator-(const int v, const Rational u) {
- int num = u.n - u.m * v;
- int dem = u.m;
- return Rational(num, dem);
- }
- Rational operator*(const int v, const Rational u) {
- int num = u.n * v;
- int dem = u.m;
- return Rational(num, dem);
- }
- Rational operator/(const int v, const Rational u) {
- int num = u.n;
- int dem = u.m * v;
- return Rational(num, dem);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement