1081 Rational Sum (20 point(s))

1081 Rational Sum (20 point(s))

题解

gcd应用。

#include<iostream>
#include<cstdio>
using namespace std;
long int n, num, den, a, b;
int gcd(long int a, long int b) {
	return b == 0 ? a : gcd(b, a % b); 
}
int main() {
	scanf("%d", &n);
	scanf("%ld/%ld", &num, &den);
	int d = gcd(num, den);
	num /= d; den /= d;
	for(int i = 1; i < n; ++i) {
		scanf("%ld/%ld", &a, &b);
		num = b * num + den * a;
		den *= b;
		int d = gcd(num, den);
		num /= d;
		den /= d;
	} 
	if(num % den == 0) printf("%ld", num / den);
	if(num % den && num / den) printf("%ld ", num / den);
	num %= den; // 分母是负数的情况。
	if(den < 0) {	den  = - den; num = - num;}
	if(num) printf("%ld/%ld", num, den);
	return 0;
}