团体程序设计天梯赛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\n"); 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 }