1. 程式人生 > >1081 Rational Sum (20)

1081 Rational Sum (20)

file appear ostream i++ pan you ont form spec

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 }

1081 Rational Sum (20)