-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathfraction_in_out.cpp
68 lines (55 loc) · 1.7 KB
/
fraction_in_out.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
using namespace std;
class Fraction{
int m_numerator;
int m_denominator;
public:
Fraction(int numerator=0, int denominator=1):
m_numerator{numerator}, m_denominator{denominator}{
reduce();
};
static int gcd(int num1, int num2){
return (num2==0) ? num1 : gcd(num2, num1%num2);
}
void reduce(void){
int devisor = gcd(m_numerator, m_denominator);
m_numerator /= devisor;
m_denominator /= devisor;
}
friend Fraction operator*(const Fraction &f1, const Fraction &f2);
friend Fraction operator*(const Fraction &f1, int value);
friend Fraction operator*(int value, const Fraction &f1);
friend istream& operator>>(istream& in, Fraction& fraction);
friend ostream& operator<<(ostream& out ,const Fraction& fraction);
void print(){
std::cout << m_numerator << "/" << m_denominator << "\n";
}
};
Fraction operator*(const Fraction &f1, const Fraction &f2){
return Fraction(f1.m_numerator * f2.m_numerator, f1.m_denominator * f2.m_denominator);
}
Fraction operator*(const Fraction &f1, int value){
return Fraction(f1.m_numerator * value, f1.m_denominator);
}
Fraction operator*(int value, const Fraction &f1){
return Fraction(f1.m_numerator * value, f1.m_denominator);
}
istream& operator>>(istream& in, Fraction& fraction){
in >> fraction.m_numerator;
in >> fraction.m_denominator;
return in;
}
ostream& operator<<(ostream& out, const Fraction& fraction){
out << fraction.m_numerator << "/" << fraction.m_denominator;
return out;
}
int main(int argc, char const *argv[]){
Fraction f1;
cout << "Enter fraction 1:\n";
cin >> f1;
Fraction f2;
cout << "Enter fraction 2:\n";
cin >> f2;
cout << f1 << " * " << f2 << " is " << f1*f2 << endl;
return 0;
}