分数类的四则运算【C++】

分数类的四则运算【C++】

时间: 1ms        内存:128M

描述:

编写分数类Fraction,实现两个分数的加、减、乘和除四则运算。主函数已给定。

输入:

每行四个数,分别表示两个分数的分子和分母,以0 0 0 0 表示结束。

输出:

空格分隔的两个分数的减和除的结果。

示例输入:

1 2 -1 2
4 3 3 4
0 0 0 0

示例输出:

1 -1
7/12 16/9

提示:

参考答案(内存最优[1268]):

#include <iostream>
using namespace std;
int cishu=1;
class Fraction
{
public:
    Fraction(){fenzi=0;fenmu=0;}
    Fraction(int x,int y){fenzi=x;fenmu=y;}
    Fraction operator - (Fraction &k2);
    friend istream & operator >>(istream &,Fraction&);
    Fraction operator / (Fraction &k1);
    friend bool operator == (Fraction &k1,int no);
    void output();
private:
    int fenzi;
    int fenmu;

};

istream & operator >>(istream &input,Fraction&k)
{
    input>>k.fenzi>>k.fenmu;
    return input;
}

bool operator == (Fraction &k1,int no)
{
    if(k1.fenzi==no&&k1.fenmu==no)
        return true;
    else
        return false;
}

Fraction Fraction::operator-(Fraction &k2)
{
    return Fraction(fenzi*k2.fenmu-k2.fenzi*fenmu,fenmu*k2.fenmu);
}

Fraction Fraction::operator / (Fraction &k1)
{
    return Fraction(fenzi*k1.fenmu,fenmu*k1.fenzi);
}

void Fraction::output()
{
    int t,r,u,v;
    u=fenmu;
    v=fenzi;
    if(v>u){t=u;u=v;v=t;}
    while((r=u%v)!=0)
    {
        u=v;
        v=r;
    }
    fenzi/=v;
    fenmu/=v;
    if(fenmu<0)
    {
        fenzi=0-fenzi;
        fenmu=0-fenmu;
    }
    if(fenmu==-1)
        cout<<0-fenzi;
    else if(fenmu==1)
        cout<<fenzi;
    else
        cout<<fenzi<<"/"<<fenmu;
    if(cishu%2!=0)
        cout<<" ";
    cishu+=1;

}
int main()
{
    Fraction f1,f2,f3;
    while(cin>>f1>>f2)
    {
    if(f1==0&&f2==0)
        break;
    f3=f1-f2;
    f3.output();
    f3=f1/f2;
    f3.output();
    cout<<endl;
    }
    return 0;
}

参考答案(时间最优[0]):

#include <iostream>
using namespace std;
int cishu=1;
class Fraction
{
public:
    Fraction(){fenzi=0;fenmu=0;}
    Fraction(int x,int y){fenzi=x;fenmu=y;}
    Fraction operator - (Fraction &k2);
    friend istream & operator >>(istream &,Fraction&);
    Fraction operator / (Fraction &k1);
    friend bool operator == (Fraction &k1,int no);
    void output();
private:
    int fenzi;
    int fenmu;

};

istream & operator >>(istream &input,Fraction&k)
{
    input>>k.fenzi>>k.fenmu;
    return input;
}

bool operator == (Fraction &k1,int no)
{
    if(k1.fenzi==no&&k1.fenmu==no)
        return true;
    else
        return false;
}

Fraction Fraction::operator-(Fraction &k2)
{
    return Fraction(fenzi*k2.fenmu-k2.fenzi*fenmu,fenmu*k2.fenmu);
}

Fraction Fraction::operator / (Fraction &k1)
{
    return Fraction(fenzi*k1.fenmu,fenmu*k1.fenzi);
}

void Fraction::output()
{
    int t,r,u,v;
    u=fenmu;
    v=fenzi;
    if(v>u){t=u;u=v;v=t;}
    while((r=u%v)!=0)
    {
        u=v;
        v=r;
    }
    fenzi/=v;
    fenmu/=v;
    if(fenmu<0)
    {
        fenzi=0-fenzi;
        fenmu=0-fenmu;
    }
    if(fenmu==-1)
        cout<<0-fenzi;
    else if(fenmu==1)
        cout<<fenzi;
    else
        cout<<fenzi<<"/"<<fenmu;
    if(cishu%2!=0)
        cout<<" ";
    cishu+=1;

}
int main()
{
    Fraction f1,f2,f3;
    while(cin>>f1>>f2)
    {
    if(f1==0&&f2==0)
        break;
    f3=f1-f2;
    f3.output();
    f3=f1/f2;
    f3.output();
    cout<<endl;
    }
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注