7-28打卡

wlxdaydayup / 2023-07-29 / 原文

拼题a第九题

#include <sstream>
#include <algorithm>

// 求最大公约数
long long gcd(long long a, long long b) {
    if (b == 0) {
        return a;
    }
    return gcd(b, a % b);
}

// 分数类定义
class Fraction {
public:
    long long numerator;
    long long denominator;

    Fraction(long long num, long long den) : numerator(num), denominator(den) {}

    // 分数加法
    Fraction operator+(const Fraction& other) const {
        long long num = numerator * other.denominator + other.numerator * denominator;
        long long den = denominator * other.denominator;
        long long commonDivisor = gcd(num, den);
        return Fraction(num / commonDivisor, den / commonDivisor);
    }
};

// 求最简分数形式
void simplifyFraction(long long& numerator, long long& denominator) {
    long long commonDivisor = gcd(numerator, denominator);
    numerator /= commonDivisor;
    denominator /= commonDivisor;
}

int main() {
    int N;
    std::cin >> N;

    Fraction totalFraction(0, 1);

    for (int i = 0; i < N; i++) {
        char slash;
        long long numerator, denominator;
        std::cin >> numerator >> slash >> denominator;

        Fraction currentFraction(numerator, denominator);
        totalFraction = totalFraction + currentFraction;
    }

    simplifyFraction(totalFraction.numerator, totalFraction.denominator);

    // 输出结果
    long long integerPart = totalFraction.numerator / totalFraction.denominator;
    long long fractionNumerator = totalFraction.numerator % totalFraction.denominator;

    if (integerPart != 0) {
        std::cout << integerPart;
        if (fractionNumerator != 0) {
            std::cout << " " << fractionNumerator << "/" << totalFraction.denominator;
        }
    } else {
        if (fractionNumerator != 0) {
            std::cout << fractionNumerator << "/" << totalFraction.denominator;
        } else {
            std::cout << 0;
        }
    }

    std::cout << std::endl;

    return 0;
}