1081 Rational Sum (20分)

在这里插入图片描述
在这里插入图片描述

#include<cstdio>
long long findMinCommon(int a, int b) {
	long long i = 2;
	long long minCommon = 1;
	while (i <= a && i <= b) {
		if (a % i == 0 && b % i == 0) {
			minCommon *= i;
			a /= i;
			b /= i;
		}
		else {
			i++;
		}
	}
	return a * b * minCommon;
}
void removeCommon(long long &a, long long &b) {
	long long i = 2;
	while (i <= a && i <= b) {
		if (a % i == 0 && b % i == 0) {
			a /= i;
			b /= i;
		}
		else {
			i++;
		}
	}
}
int main() {
	long long n, numerator = 0, denominator = 1;
	scanf("%lld", &n);
	for (int i = 0;i < n;i++) {
		long long n, d;
		scanf("%lld/%lld", &n, &d);
		long long common = findMinCommon(denominator, d);
		numerator = numerator * (common / denominator) + n * (common / d);
		denominator = common;
		removeCommon(numerator, denominator);
	}
	long long integer = numerator / denominator;
	numerator %= denominator;
	if (integer != 0) {
		printf("%lld", integer);
	}
	if (numerator != 0) {
		if (numerator < 0 && integer != 0) {
			numerator = -numerator;
		}
		if (integer != 0)
			printf(" ");
		printf("%lld/%lld", numerator, denominator);
	}
	else if (integer == 0) {
		printf("0");
	}
}
发布了61 篇原创文章 · 获赞 0 · 访问量 804

猜你喜欢

转载自blog.csdn.net/weixin_43116322/article/details/104027718