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

思路:熟悉了cpp的OOP, 学会了怎么重载加法

cpp
#include <bits/stdc++.h>
using namespace std;

struct Fraction {
public:
    int numerator;
    int denominator;

    Fraction(int numerator, int denominator) : numerator(numerator), denominator(denominator) {
        int common_divisor = gcd(numerator, denominator);
        this->numerator /= common_divisor;
        this->denominator /= common_divisor;
    }

    Fraction operator+(const Fraction& other) const {
        int common_denominator = denominator * other.denominator;
        int new_numerator = numerator * other.denominator + other.numerator * denominator;
        return Fraction(new_numerator, common_denominator);
    }

    void print() const {
        cout << numerator << "/" << denominator << endl;
    }
};

int main() {
    int a1, b1, a2, b2;
    cin >> a1 >> b1 >> a2 >> b2;
    Fraction f1(a1, b1), f2(a2, b2);
    Fraction result = f1 + f2;
    result.print();
    return 0;
}

用时10min