1081 Rational Sum (20)

Given N rational numbers in the form "numerator/denominator", you are supposed to calculate their sum.

Input Specification:

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.

Output Specification:

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.

Sample Input 1:

5
2/5 4/15 1/30 -2/60 8/3

Sample Output 1:

3 1/3

Sample Input 2:

2
4/3 2/3

Sample Output 2:

2

Sample Input 3:

3
1/3 -1/6 1/8

Sample Output 3:

7/24

注意分子和为0的情况
 1 #include<iostream>
 2 #include<math.h>
 3 using namespace std;
 4 long GCD(long a, long b){
 5   a=abs(a);
 6   b=abs(b);
 7   while(b){
 8     long temp=a%b;
 9     a=b;
10     b=temp;
11   }
12   return a;
13 }
14 int main(){
15   long int n, i, fz=0, fm=0, a, b;
16   cin>>n;
17   scanf("%lld/%lld", &fz, &fm);
18   for(i=1; i<n; i++){
19     scanf("%lld/%lld", &a, &b);
20     fz = fz*b+a*fm; fm=fm*b;
21     long int gcd = GCD(fz, fm);
22     fz /= gcd; fm /= gcd;
23   }
24   if(fz==0) cout<<0;
25   else if(fz<fm) cout<<fz<<"/"<<fm<<endl;
26   else{
27     cout<<fz/fm;
28     if(fz%fm!=0) cout<<" "<<fz%fm<<"/"<<fm;
29   }
30   return 0;
31 }

猜你喜欢

转载自www.cnblogs.com/mr-stn/p/9175437.html
今日推荐