#include
#include
int N;
long a, b;
long long numerator, denominator, integer;
long long gcd(long long c, long long d){
return c == 0 ? d : gcd(d % c, c);
}
void calSum(long c, long d){
numerator = numerator * d + denominator * c;
denominator = denominator * d;
long long tmp = abs(gcd(numerator, denominator));
numerator /= tmp;
denominator /= tmp;
}
int main(){
scanf("%d", &N);
numerator = 0;
denominator = 1;
for(int i = 0; i < N; ++i){
scanf("%ld/%ld", &a, &b);
calSum(a, b);
}
if(numerator < 0){
printf("-");
numerator = -numerator;
}
integer = numerator / denominator;
if(integer > 0){
printf("%lld%s", integer, numerator % denominator > 0 ? " " : "");
} else if(numerator % denominator == 0){
printf("0");
return 0;
}
numerator %= denominator;
if(numerator > 0){
printf("%lld/%lld", numerator, denominator);
}
return 0;
}
Given N rational numbers in the form numerator/denominator
, you are supposed to calculate their sum.
Each input file contains one test case. Each case starts with a positive integer N (≤100), followed in the next line N rational numbers a1/b1 a2/b2 ...
where all the numerators and denominators are in the range of long int. If there is a negative number, then the sign must appear in front of the numerator.
For each test case, output the sum in the simplest form integer numerator/denominator
where integer
is the integer part of the sum, numerator
< denominator
, and the numerator and the denominator have no common factor. You must output only the fractional part if the integer part is 0.
5
2/5 4/15 1/30 -2/60 8/3
3 1/3
2
4/3 2/3
2
3
1/3 -1/6 1/8
7/24