第十七周oj刷题——Problem B: 分数类的四则运算【C++】

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

/* All rights reserved.
 * 文件名称:test.cpp
 * 作者:陈丹妮
 * 完成日期:2015年 7 月 2 日
 * 版 本 号:v1.0
 */
#include <iostream>
using namespace std;
class Fraction
{
private:
    int x;
    int y;
    int e;
public:
    Fraction(int a=0,int b=1):x(a),y(b)
    {
        e=0;
    }
    friend istream& operator>>(istream& input,Fraction &f);
    bool operator ==(int a);
    void output();
    Fraction operator -(Fraction &f1);
    Fraction operator /(Fraction &f1);
};
istream& operator>>(istream& input,Fraction &f)
{
    input>>f.x>>f.y;
    return input;
}
bool Fraction::operator==(int a)
{
    if(x==a)
        return true;
    else
        return false;
}
Fraction Fraction::operator -(Fraction &f1)
{
    Fraction f;
    f.x=x*f1.y-f1.x*y;
    f.y=y*f1.y;

    return f;

}
Fraction Fraction::operator /(Fraction &f1)
{
    Fraction f;
    f.x=x*f1.y;
    f.y=y*f1.x;
    return f;
}
void Fraction::output()
{
    int r,m=x,n=y,t;
    if(m<n)
    {
        t=n;
        n=m;
        n=t;
    }
    while(n!=0)
    {
        r=m%n;
        m=n;
        n=r;
    }
    if(y==m)
        cout<<x/m;
    else if(x/m<0&&y/m<0)
        cout<<(-1)*x/m<<'/'<<(-1)*y/m;
    else if(y/m<0)
        cout<<-x/m<<'/'<<-y/m;
        else
cout<<x/m<<'/'<<y/m;

    if(e==0)
        cout<<" ";
    e++;
}

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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-30 22:43:50

第十七周oj刷题——Problem B: 分数类的四则运算【C++】的相关文章

第十五周oj刷题—— Problem C: 矩形类中运算符重载【C++】

Description 定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,实现矩形加法,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动. 两个矩形相加的规则是:决定矩形的对应坐标分别相加,如 左下角(1,2),右上角(3,4)的矩形,与 左下角(2,3),右上角(4,5)的矩形相加,得到的矩形是 左下角(3,5),右上角(7,9)的矩形. 这个规则没有几何意义,就这么定义好了. 输出面积的功能通过重载"<<&quo

第十五周oj刷题——Problem B: 矩形类定义【C++】

Description 定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动. Input 四个数,分别表示矩形左下角和右上角顶点的坐标,如输入3.7 0.4 6.5 4.9,代表左下角坐标为(3.7, 0.4),右上角坐标为(6.5, 4.9). Output 输出一共有3行(请参考提示(hint)中的main函数): 第一行:由输入的坐标确定的矩形对象p1的面积 第二行:由对象复

第十七周oj刷题——Problem A: 实现复数类中的加运算符重载【C++运算符重载】

Description int家有i1和i2弟兄俩,小手一拉i1+i2,加起来了:double家有d1和d2姐妹俩,小手也一拉,d1+d2,也加起来了.C++村子里来了复数(Complex)一家子,也有俩兄弟c1和c2,想要来个累加,笨乎乎地,c1.add(c2).c1和c2伤心极了,也想像其他小朋友一样,小手一拉,c1+c2,也能加起来.这个任务交给了正在看题的魔术师,帮他们一个忙,让复数也能用+号相加吧.(可以复制提示部分的代码开始你的编程) Input 四个数,分别代表两个虚数c1和c2的

第十七周oj刷题——Problem D: C++习题 输入输出--公用继承

Description Student类含有私有数据成员:num,name,sex,公有成员函数: 输入函数get_value()和输出函数display().采用公用继承方式实现类Student1,增加数据成员:age,addr,成员函数:get_value_1()和display_1().在程序运行时输入num,name,sex,age,addr的值,调用输出函数输出以上5个数据的值. Input 输入num,name,sex,age,addr的值 Output 输出num,name,sex

第十七周oj刷题——Problem E: C++习题 输入输出--私有继承

Description Student类含有私有数据成员:num,name,sex,公有成员函数: 输入函数get_value()和输出函数display().采用私有继承方式实现类Student1,增加数据成员:age,addr,成员函数:get_value_1()和display_1().在程序运行时输入num,name,sex,age,addr的值,调用输出函数输出以上5个数据的值. Input 输入num,name,sex,age,addr的值 Output 输出num,name,sex

第十七周oj刷题——Problem F: C++习题 输入输出--保护继承

Description Student类含有私有数据成员:num,name,sex,公有成员函数: 输入函数get_value()和输出函数display().采用私有保护方式实现类Student1,增加数据成员:age,addr,成员函数:get_value_1()和display_1().在程序运行时输入num,name,sex,age,addr的值,调用输出函数输出以上5个数据的值. Input 输入num,name,sex,age,addr的值 Output 输出num,name,sex

第十七周oj刷题——Problem O: B C++时间类的运算符重载

Description C++时间类的运算符重载 定义一个时间类Time,其数据成员为表示时间的小时(hour).分(minute),秒(second). 重载运算符"+",使之能用于时间对象的加法运算:重载运算符"<<",使之能用于时间对象的输出操作. (1)参加运算的两个操作数可以都是时间类对象,也可以其中有一个是整数(表示秒),顺序任意. 例如,t1+t2,i+t1,t1+i均合法(设i为整数表示秒数, t1,t2为时间类Time对象). (2)输

第十六周oj刷题——Problem C: B 求类中数据成员的最大值-类模板

Description 声明一个类模板,类模板中有三个相同类型的数据成员,有一函数来获取这三个数据成员的最大值. Input 分别输入3个整数,3个浮点数,3个字符 Output 3个整数的最大值 3个浮点数中的最大值 3个字符中的最大值 Sample Input 9 5 6 1.1 3.4 0.9 a b c Sample Output 9 3.40 c /* All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年 6 月 25 日

第十六周oj刷题——Problem D: B 友元类-计算两点间距离

Description 类Distance定义为类Point的友元类来实现计算两点之间距离的功能. Point类中有两个私有数据成员X和Y来表示点的两个坐标(横坐标和纵坐标), 成员函数需要自己定义. 主程序输入两个Point点的坐标,计算两个点之间的距离. Input 两个点的坐标(横坐标和纵坐标) Output 两个点的距离(保留了两位小数) Sample Input 1.0 1.0 2.0 2.0 Sample Output 1.41 /* All rights reserved. * 文