团体程序设计天梯赛PTA L1-009 N个数求和

题意:求N个分数的和,用带分数的形式输出

思路:算出各个分母的最小公倍数,在进行分子相加,最后化简

 1 #include<stdio.h>
 2 #include<math.h>
 3 //辗转相除法求出最大公约数
 4 
 5 int g(long long x,long long y)
 6 {
 7     if(x%y==0)
 8         return y;
 9     return g(y,x%y);
10 }
11 int main()
12 {
13     long long n,i,s=0;
14     scanf("%lld",&n);
15     int a[n+2],b[n+2];//分别代表分母、分子
16     for(i=1; i<=n; i++)
17     {
18         scanf("%lld/%lld",&a[i],&b[i]);
19     }
20     long long m=1;
21     for(i=2; i<=n; i++)
22     {
23         //求出最小公倍数
24         m=b[i]*b[i-1]/g(b[i],b[i-1]);
25     }
26     for(i=1; i<=n; i++)
27     {
28         //化成分母相同,进行分子相加
29         a[i]=a[i]*m/b[i];
30         s+=a[i];//s是分子相加的总和
31     }
32     long long int j,da=0;
33     j=s;//用j存下s
34     s/=m;//算出整数部分
35     if(s==0&&j==0)//如果整数部分和分数部分都是0
36         printf("0
");
37     else if(s!=0)
38     {
39         da=1;
40         printf("%lld",s);
41     }
42     j=j-s*m;
43     if(j!=0)
44     {
45         if(da==1)
46             printf(" ");
47         int t=g(j,m);//化简
48         printf("%lld/%lld",j/t,m/t);
49     }
50     return 0;
51 }
原文地址:https://www.cnblogs.com/dark-ming/p/13607704.html