OJ分數的四則運算
Description
編寫分數類Fraction,實現兩個分數的加、減、乘和除四則運算。主函式已給定。Input
每行四個數,分別表示兩個分數的分子和分母,以0 0 0 0 表示結束。Output
空格分隔的兩個分數的減和除的結果。Sample Input
1 2 -1 2
4 3 3 4
0 0 0 0
Sample Output
1 -1
7/12 16/9
#include <iostream>
using namespace std; class Fraction { private: int fz,fm; public: Fraction() {}; Fraction(int z,int m):fz(z),fm(m) {}; Fraction operator+(Fraction &f); Fraction operator-(Fraction &f); Fraction operator*(Fraction &f); Fraction operator/(Fraction &f); bool operator==(int n); friend istream &operator>>(istream &input,Fraction &f); void output(); void simplify(); }; Fraction Fraction::operator+(Fraction &f) { return Fraction(fz*f.fm+fm*f.fz,fm*f.fm); } Fraction Fraction::operator-(Fraction &f) { return Fraction(fz*f.fm-fm*f.fz,fm*f.fm); } Fraction Fraction::operator*(Fraction &f) { return Fraction(fz*f.fz,fm*f.fm); } Fraction Fraction::operator/(Fraction &f) { return Fraction(fz*f.fm,fm*f.fz); } istream&operator>>(istream&input,Fraction &f) { input>>f.fz>>f.fm; return input; } bool Fraction::operator==(int n) { if(fz==0&&fm==0) return true; else return false; } void Fraction::output() { simplify(); if(fz%fm==0) cout<<fz/fm; else { if(fm>0) cout<<fz<<"/"<<fm; else cout<<-fz<<"/"<<-fm;
} } void Fraction::simplify() {
int r,m=fz,n=fm; while(n) { r=m%n; m=n; n=r; } fz/=m; fm/=m; } int main()
{
Fraction f1,f2,f3;
while(cin>>f1>>f2) {
if(f1==0&&f2==0)
break;
f3=f1-f2;
f3.output(); cout<<" "; f3=f1/f2;
f3.output();
cout<<endl;
}
return 0;
}
學習總結:
流運算子的插入運算子<<與流體去運算子>>必須要用friend函式