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/3Sample Output 1:
3 1/3Sample Input 2:
2 4/3 2/3Sample Output 2:
2Sample Input 3:
3 1/3 -1/6 1/8Sample Output 3:
7/24
1 #include<stdio.h> 2 #include<vector> 3 #include<math.h> 4 #include<cmath> 5 using namespace std; 6 7 int getGCD(long long a,long long b) 8 { 9 while(b!=0) 10 { 11 int t = a % b; 12 a = b ; 13 b = t ; 14 } 15 16 return a; 17 } 18 int main() 19 { 20 int n,i; 21 long long tem1,tem2; 22 scanf("%d",&n); 23 vector<long long> child,mother; 24 for(i = 0; i < n ;i ++) 25 { 26 27 scanf("%lld/%lld",&tem1,&tem2); 28 child.push_back(tem1); 29 mother.push_back(tem2); 30 } 31 32 long long MonSum = 1; 33 long long ChildSum = 0; 34 long long tem ; 35 for(i = 0; i < mother.size() ;i++) 36 { 37 ChildSum = mother[i]*ChildSum + MonSum*child[i]; 38 MonSum *= mother[i]; 39 tem = getGCD(abs(MonSum) , abs(ChildSum)); 40 ChildSum = ChildSum / tem; 41 MonSum = MonSum / tem; 42 } 43 44 45 long long pre; 46 47 pre = ChildSum/MonSum; 48 ChildSum = ChildSum % MonSum; 49 tem = getGCD(abs(MonSum) , abs(ChildSum)); 50 ChildSum = ChildSum / tem; 51 MonSum = MonSum / tem; 52 if(ChildSum == 0) 53 { 54 printf("%lld\n",pre); 55 } 56 else if( ChildSum != 0 && pre == 0) 57 { 58 printf("%lld/%lld\n",ChildSum,MonSum); 59 } 60 else if( ChildSum != 0 && pre != 0) 61 { 62 printf("%lld ",pre); 63 printf("%lld/%lld\n",ChildSum,MonSum); 64 } 65 66 67 return 0; 68 }