题目:实现分数类Fraction
class Fraction {
int numerator, denominator;
public:
....
};
要求:
1、实现分数的+,-,*,/
2、逻辑运算==、!=、<、<=、>、>= 6种运输符号。
3、实现输出<<, 输入 >> 操作符重载。
样例1输入:
1 2
3 4
样例1输出:
a= 1/2, b = 3/4
1/2 + 3/4 = 5/4
1/2 - 3/4 = -1/4
1/2 * 3/4 = 3/8
1/2 / 3/4 = 2/3
a == b is 0
a != b is 1
a <= b is 1
a >= b is 0
a < b is 1
a > b is 0
c == d is 1
样例2输入:
2 4
3 4
样例2输出:
a= 1/2, b = 3/4
1/2 + 3/4 = 5/4
1/2 - 3/4 = -1/4
1/2 * 3/4 = 3/8
1/2 / 3/4 = 2/3
a == b is 0
a != b is 1
a <= b is 1
a >= b is 0
a < b is 1
a > b is 0
c == d is 1
代码如下:
#include <iostream>
#include <cmath>
using namespace std;
class Fraction {
private:
int n;
int d;
public:
Fraction(int c_n = 0, int c_d = 0) {
n = c_n;
d = c_d;
this->simplify();
}
void simplify() {
int temp = abs(n);
while (temp > 1) {
if (n % temp == 0 && d % temp == 0) {
n /= temp;
d /= temp;
}
temp--;
}
if (n * d >= 0) {
n = abs(n);
d = abs(d);
} else {
n = -abs(n);
d = abs(d);
}
}
friend istream& operator>> (istream& in, Fraction& f);
friend ostream& operator<< (ostream& out, const Fraction& f);
Fraction operator+ (const Fraction &f);
Fraction operator- (const Fraction &f);
Fraction operator* (const Fraction &f);
Fraction operator/ (const Fraction &f);
int operator== (const Fraction &f);
int operator!= (const Fraction &f);
int operator<= (const Fraction &f);
int operator>= (const Fraction &f);
int operator< (const Fraction &f);
int operator> (const Fraction &f);
};
istream& operator>> (istream& in, Fraction& f) {
in >> f.n >> f.d;
f.simplify();
return in;
}
ostream& operator<< (ostream& out, const Fraction& f) {
out << f.n << "/" << f.d;
return out;
}
Fraction Fraction::operator+ (const Fraction &f) {
Fraction t((n * f.d + d * f.n), (d * f.d));
t.simplify();
return t;
}
Fraction Fraction::operator- (const Fraction &f) {
Fraction t((n * f.d - d * f.n), (d * f.d));
t.simplify();
return t;
}
Fraction Fraction::operator* (const Fraction &f) {
Fraction t((n * f.n), (d * f.d));
t.simplify();
return t;
}
Fraction Fraction::operator/ (const Fraction &f) {
Fraction t((n * f.d), (d * f.n));
t.simplify();
return t;
int Fraction::operator== (const Fraction &f) {
if(n == f.n && d == f.d) {
return 1;
} else {
return 0;
}
}
int Fraction::operator!= (const Fraction &f) {
if(n == f.n && d == f.d) {
return 0;
} else {
return 1;
}
}
int Fraction::operator>= (const Fraction &f) {
if(n * f.d >= d * f.n) {
return 1;
} else {
return 0;
}
}
int Fraction::operator<= (const Fraction &f) {
if(n * f.d <= d * f.n) {
return 1;
} else {
return 0;
}
}
int Fraction::operator> (const Fraction &f) {
if(n * f.d > d * f.n) {
return 1;
} else {
return 0;
}
}
int Fraction::operator< (const Fraction &f) {
if(n * f.d < d * f.n) {
return 1;
} else {
return 0;
}
}
int main(int argc, char *argv[]) {
Fraction a(1),b(1,3),c(-3,9),d(2,-6);
cin >> a >> b;
cout << "a= " << a << ", b = " << b << endl;
cout << a << " + " << b << " = " << a + b << endl;
cout << a << " - " << b << " = " << a - b << endl;
cout << a << " * " << b << " = " << a * b << endl;
cout << a << " / " << b << " = " << a / b << endl;
cout << "a == b is " << (a == b) << endl;
cout << "a != b is " << (a != b) << endl;
cout << "a <= b is " << (a <= b) << endl;
cout << "a >= b is " << (a >= b) << endl;
cout << "a < b is " << (a < b) << endl;
cout << "a > b is " << (a > b) << endl;
cout << "c == d is " << (c == d) << endl;
return 1;
}