Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <iostream>
- size_t maxDivisor(size_t first, size_t second) {
- if (second == 0) {
- return first;
- }
- return maxDivisor(second, first % second);
- }
- class Rational {
- private:
- int x, y;
- public:
- Rational(int first = 0, int second = 1): x(first), y(second) {}
- int numerator() const {
- if (y < 0) {
- return -x / maxDivisor(abs(x), abs(y));
- }
- return x / maxDivisor(abs(x), abs(y));
- }
- int denominator() const {
- return abs(y) / maxDivisor(abs(x), abs(y));
- }
- Rational& operator++ () {
- x = x + y;
- return *this;
- }
- Rational& operator-- () {
- x = x - y;
- return *this;
- }
- Rational operator++ (int) {
- Rational temp(*this);
- x = x + y;
- return temp;
- }
- Rational operator-- (int) {
- Rational temp(*this);
- x = x - y;
- return temp;
- }
- };
- Rational operator + (const Rational& z) {
- return Rational(z.numerator(), z.denominator());
- }
- Rational operator - (const Rational& z) {
- return Rational(-z.numerator(), z.denominator());
- }
- Rational operator + (const Rational& first, const Rational& second) {
- Rational temp = Rational(
- first.numerator() * second.denominator() + first.denominator() * second.numerator(),
- first.denominator() * second.denominator());
- return Rational(temp.numerator(), temp.denominator());
- }
- Rational operator - (const Rational& first, const Rational& second) {
- Rational temp = Rational(
- first.numerator() * second.denominator() - first.denominator() * second.numerator(),
- first.denominator() * second.denominator());
- return Rational(temp.numerator(), temp.denominator());
- }
- Rational operator * (const Rational& first, const Rational& second) {
- Rational temp = Rational(
- first.numerator() * second.numerator(),
- first.denominator() * second.denominator());
- return Rational(temp.numerator(), temp.denominator());
- }
- Rational operator / (const Rational& first, const Rational& second) {
- Rational temp = Rational(
- first.numerator() * second.denominator(),
- first.denominator() * second.numerator());
- return Rational(temp.numerator(), temp.denominator());
- }
- bool operator == (const Rational& first, const Rational& second) {
- return first.numerator() == second.numerator() &&
- first.denominator() == second.denominator();
- }
- bool operator != (const Rational& first, const Rational& second) {
- return first.numerator() != second.numerator() ||
- first.denominator() != second.denominator();
- }
- Rational& operator *= (Rational& first, const Rational& second) {
- first = first * second;
- return first;
- }
- Rational& operator += (Rational& first, const Rational& second) {
- first = first + second;
- return first;
- }
- Rational& operator -= (Rational& first, const Rational& second) {
- first = first - second;
- return first;
- }
- Rational& operator /= (Rational& first, const Rational& second) {
- first = first / second;
- return first;
- }
- int main() {
- Rational q(0, 2);
- --q;
- std::cout << q.numerator() << " " << q.denominator() << "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement