1. 程式人生 > >OJ分數的四則運算

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函式