Problem C: 分数类的乘法

Description

封装一个分数类Fract,用来处理分数功能和运算,支持以下操作:

1. 构造:传入两个参数n和m,表示n/m;分数在构造时立即转化成最简分数。

2. show()函数:分数输出为“a/b”或“-a/b”的形式,a、b都是无符号整数。若a为0或b为1,只输出符号和分子,不输出“/”和分母。

3. 在分数类上重载乘法运算符,进行分数的乘法运算

-----------------------------------------------------------------------------

你设计一个Fract类,使得main()函数能够运行并得到正确的输出。调用格式见append.cc

Input

输入多行,每行四个整数n、m、q、p,分别为两个分数n/m和q/p,至EOF结束。输入的分母不会为0;

Output

每行输出一个分数,为n/m和q/p的乘积,与输入顺序一致。

分数输出时为最简形式,负号只会出现在最前面,若分母为1或分子为0,则只输出一个整数,即分子部分,而没有“/”和分母部分。

Sample Input

1 3 2 3 20 -15 150 80 0 77 -9 1 6 6 4 4 12 16 4 3 -33 -48 6 11 0 -10 360 12

Sample Output

2/9 -5/2 0 1 1 3/8 0

HINT

Append Code

#include<iostream>

#include<iomanip>

#include <cstdio>

using namespace std;

int gcd(int a,int b) //辗转相除法;大除以小
{
        return b==0?a:gcd(b,a%b);//分母为零不能继续
}

class Fract

{

private:

    int x,y;

public:

    Fract(int a=0,int b=0):x(a),y(b)

    {

        int flager=1;

        if(y<0)

        {

            y=-y;

            x=-x;

        }

        if(x<0)

        {

            flager=-1;

            x=-x;

        }

        int flag=gcd(max(x,y),min(x,y));//max min,节约

        x/=flag;

        y/=flag;

        if(flager==-1)//前方输出

            x=-x;

    }

    void show()

    {

        if(x==0||y==1)

            cout<<x<<endl;

        else

            cout<<x<<‘/‘<<y<<endl;

    }

    Fract &operator*(Fract a)

    {

        x=x*a.x;

        y=y*a.y;

        int flager=1;

        if(x<0)

        {

            flager=-1;

            x=-x;

        }

        int flag=gcd(max(x,y),min(x,y));//max min,节约

        x/=flag;

        y/=flag;

        if(flager<0)

            x*=-1;

        return *this;

    }

};

int main()

{

    int n, m, p, q;

    while(cin >> n >> m >> q >> p)

    {

        Fract f1(n, m), f2(q, p);

        Fract fr = f1 * f2;

        fr.show();

    }

}

时间: 2024-11-03 21:25:54

Problem C: 分数类的乘法的相关文章

实验11:Problem C: 分数类的乘法

Home Web Board ProblemSet Standing Status Statistics Problem C: 分数类的乘法 Problem C: 分数类的乘法 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 650  Solved: 477[Submit][Status][Web Board] Description 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作: 1. 构造:传入两个参数n和m,表示n/m:分数在

实验11:Problem A: 分数类的输出

注意如果是负数,要把负号放在分子上 Home Web Board ProblemSet Standing Status Statistics Problem A: 分数类的输出 Problem A: 分数类的输出 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1453  Solved: 574[Submit][Status][Web Board] Description 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作: 1. 构造:

实验11:Problem D: 分数类的模板数组类

在默认构造函数里面,分母的默认值不能为0!! Home Web Board ProblemSet Standing Status Statistics Problem D: 分数类的模板数组类 Problem D: 分数类的模板数组类 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 509  Solved: 350[Submit][Status][Web Board] Description 封装一个模板数组类Array,支持一下操作: 1. 构造函

实验11:Problem B: 分数类的类型转换

Home Web Board ProblemSet Standing Status Statistics Problem B: 分数类的类型转换 Problem B: 分数类的类型转换 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 579  Solved: 431[Submit][Status][Web Board] Description 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作: 1. 构造:传入两个参数n和m,表示n/m

Problem S: 分数类的模板数组类

Problem S: 分数类的模板数组类 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2155  Solved: 1624[Submit][Status][Web Board] Description 封装一个模板数组类Array,支持一下操作: 1. 构造函数Array(int n),将数组初始化为n个存储空间: 2. 函数input(int n),读取最多n个元素,但不能超过数组存储空间的上限: 3. 重载下标运算符,返回数组的元素. 封装一

Problem F: 分数类的类型转换

Description 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作: 1. 构造:传入两个参数n和m,表示n/m:分数在构造时立即转化成最简分数. 2. show()函数:分数输出为"a/b"或"-a/b"的形式,a.b都是无符号整数.若a为0或b为1,只输出符号和分子,不输出"/"和分母. 3. double类型转换函数:用分子除以分母,得到的小数.注意:分子为0时不要输出为"-0" ----------

Problem A: 分数类的输出

Description 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作: 1. 构造:传入两个参数n和m,表示n/m:分数在构造时立即转化成最简分数. 2. show()函数:分数输出为"a/b"或"-a/b"的形式,a.b都是无符号整数.若a为0或b为1,只输出符号和分子,不输出"/"和分母. --------------------------------------------------------------------

Problem B: 分数类的类型转换

Description 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作: 1. 构造:传入两个参数n和m,表示n/m:分数在构造时立即转化成最简分数. 2. show()函数:分数输出为"a/b"或"-a/b"的形式,a.b都是无符号整数.若a为0或b为1,只输出符号和分子,不输出"/"和分母. 3. double类型转换函数:用分子除以分母,得到的小数.注意:分子为0时不要输出为"-0" ----------

第十七周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