7-28打卡
拼题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;
}