Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int GCD(int a, int b)
- {
- while (b)
- {
- a %= b;
- swap(a, b);
- }
- return a;
- }
- class Rational
- {
- public:
- Rational() : p(0), q(1)
- {}
- Rational(int numerator, int denominator) : p(numerator), q(denominator)
- {
- if (p > 0 && q < 0)
- {
- p = -p;
- q = -q;
- }
- if (p == 0)
- q = 1;
- int t = GCD(p, q);
- p /= t;
- q /= t;
- }
- int Numerator() const
- {
- return p;
- }
- int Denominator() const
- {
- return q;
- }
- private:
- int p;
- int q;
- };
- bool operator==(const Rational &a, const Rational &b)
- {
- return (a.Denominator() == b.Denominator() && a.Numerator() == b.Numerator());
- }
- Rational operator+(const Rational &a, const Rational &b)
- {
- return Rational(a.Numerator() * b.Denominator() + b.Numerator() * a.Denominator(),
- a.Denominator() * b.Denominator());
- }
- Rational operator-(const Rational &a, const Rational &b)
- {
- return Rational(a.Numerator() * b.Denominator() - b.Numerator() * a.Denominator(),
- a.Denominator() * b.Denominator());
- }
- void printRational(const Rational &r)
- {
- cout << r.Numerator() << "/" << r.Denominator();
- }
- void testRational(int n1, int d1, int n2, int d2)
- {
- Rational r1(n1, d1);
- Rational r2(n2, d2);
- printRational(r1);
- cout << " and ";
- printRational(r2);
- cout << "\nSum: ";
- printRational(r1 + r2);
- cout << " ";
- printRational(r2 + r1);
- cout << "\nDiff: ";
- printRational(r1 - r2);
- cout << " ";
- printRational(r2 - r1);
- cout << "\nEqu: " << (r1 == r2) << " = " << (r2 == r1) << endl << endl;
- }
- int main()
- {
- testRational(1, 1, 1, 1);
- testRational(1, 1, 2, 2);
- testRational(2, 2, 2, 2);
- testRational(-1, -1, -1, -1);
- cout << endl;
- testRational(-1, 1, -2, 2);
- testRational(1, -1, 2, -2);
- testRational(-1, 1, 2, -2);
- testRational(0, -1, 2, -2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement