1081 Rational Sum (20)
Posted mr-stn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }
以上是关于1081 Rational Sum (20)的主要内容,如果未能解决你的问题,请参考以下文章