Skip to content

E27653: Fraction类

http://cs101.openjudge.cn/pctbook/E27653/

请练习用OOP方式实现。

思路:建立一个分数类,定义分数的定义,化简,运算和输出,用时约30分钟(主要用来学习什么是类)

cpp
//该题练习使用了一下类
#include <iostream>
using namespace std;
//最大公约数
int gcd(int a, int b)
{
    if (b == 0)
    {
        return a;
    }
    return gcd(b, a % b);
    }

//实现分数相加,化简的类
class Fraction
{
    private:
        int numerator; //分子
        int denominator; //分母
    public:
        Fraction(int numerator, int denominator)
        {
            this->numerator = numerator;
            this->denominator = denominator;
            simplify();
        }
        //化简
        void simplify()
        {
            int g = gcd(this->numerator, this->denominator);
            this->numerator /= g;
            this->denominator /= g;
        }
        //定义分数相加
        Fraction operator+(Fraction& f)
        {
            int numerator = this->numerator * f.denominator + f.numerator * this->denominator;
            int denominator = this->denominator * f.denominator;
            simplify();
            return Fraction(numerator, denominator);
        }
        //输出
        void show()
        {
            cout << this->numerator << "/" << this->denominator << endl;
        }
};

int main()
{
    int numerator_1, denominator_1, numerator_2, denominator_2;
    cin >> numerator_1 >> denominator_1 >> numerator_2 >> denominator_2;
    //两个分数相加及化简
    Fraction f1(numerator_1, denominator_1);
    Fraction f2(numerator_2, denominator_2);
    Fraction f3 = f1 + f2;
    f3.show();
}