码迷,mamicode.com
首页 > 其他好文 > 详细

1081 Rational Sum (20)

时间:2018-06-12 23:00:13      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:tor   while   cal   class   math.h   nta   space   main   情况   

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)

标签:tor   while   cal   class   math.h   nta   space   main   情况   

原文地址:https://www.cnblogs.com/mr-stn/p/9175437.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!