N个数求和

本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

输入格式:

输入第一行给出一个正整数N≤100)。随后一行按格式a1/b1 a2/b2 ...给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

输出格式:

输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

输入样例1:

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

输出样例1:

3 1/3
 

输入样例2:

2
4/3 2/3
 

输出样例2:

2
 

输入样例3:

3
1/3 -1/6 1/8
 

输出样例3:

7/24
 1 #include<stdio.h>
 2 #include<math.h>
 3 int DIVISOR(int a,int b);
 4 int main(void)
 5 {
 6     int N,a,b,divisor,inte;
 7     scanf("%d",&N);
 8     int denominator,molecule;
 9     scanf("%d/%d",&molecule,&denominator);
10     for(int i = 0;i<N-1;i++)
11     {
12         scanf("%d/%d",&a,&b);
13         molecule = a*denominator+molecule*b;
14         denominator *= b;
15         divisor = DIVISOR(fabs(molecule),fabs(denominator));
16         molecule /= divisor;
17         denominator /= divisor;
18     } 
19     if(denominator<0)
20     {
21         molecule = -molecule;
22         denominator = -denominator;
23     }
24     if(molecule && molecule/denominator==0)
25     {
26         printf("%d/%d",molecule,denominator);
27     }
28     else if(molecule%denominator==0)
29     {
30         printf("%d",molecule/denominator);
31     }
32     else
33         printf("%d %d/%d",molecule/denominator,molecule%denominator,denominator);
34     return 0;
35 } 
36 
37 int DIVISOR(int a,int b)
38 {
39     if(b == 0)
40     return a;
41     else
42     return DIVISOR(b,a%b);
43 }

 

posted @ 2020-12-09 18:45  loliconsk  阅读(66)  评论(0)    收藏  举报