#include <iostream>
#include "fraction.h"
using namespace std;
int gcd(int u, int v);
fraction::fraction(int n, int d) : numerator(n), denominator(d)
{
int common = gcd(numerator, denominator);
numerator /= common;
denominator /= common;
}
fraction operator+(fraction f1, fraction f2)
{
int n = f1.numerator * f2.denominator +
f2.numerator * f1.denominator;
int d = f1.denominator * f2.denominator;
return fraction(n, d);
}
fraction operator-(fraction f1, fraction f2)
{
int n = f1.numerator * f2.denominator -
f2.numerator * f1.denominator;
int d = f1.denominator * f2.denominator;
return fraction(n, d);
}
fraction operator*(fraction f1, fraction f2)
{
int n = f1.numerator * f2.numerator;
int d = f1.denominator * f2.denominator;
return fraction(n, d);
}
fraction operator/(fraction f1, fraction f2)
{
int n = f1.numerator * f2.denominator;
int d = f1.denominator * f2.numerator;
return fraction(n, d);
}
ostream& operator<<(ostream& out, fraction& f)
{
cout << endl << f.numerator << "/" << f.denominator << endl;
return out;
}
istream& operator>>(istream& in, fraction& f)
{
cout << "Please enter the numerator: ";
cin >> f.numerator;
cout << "Please enter the denominator: ";
cin >> f.denominator;
return in;
}
// Euclid's Algorithm for finding the greatest common divisor
int gcd(int u, int v)
{
u = (u < 0) ? -u : u;
v = (v < 0) ? -v : v;
while (u > 0)
{
if (u < v)
{
int t = u; // swap u and v
u = v;
v = t;
}
u -= v;
}
return v; // the GCD of u and v
}