#include <stdio.h>
void JJ(int *z1,int *m1,int *z2,int *m2);
int main()
{
int i,n;
scanf("%d",&n);
int z[n+1];
int m[n+1];
z[n]=0,m[n]=1;
for(i=0;i<n;i++){
scanf("%d/%d",&z[i],&m[i]);
}
for(i=0;i<n;i++){
i==n-1 ? m[n-1] = n*m[n-1] : 1;
JJ(&z[i],&m[i],&z[i+1],&m[i+1]);
}
if(m[n] != 1){
printf("%d/%d",z[n],m[n]);
}else{
printf("%d",z[n]);
}
return 0;
}
void JJ(int *z1,int *m1,int *z2,int *m2)
{
int m,z,a,b,yu;
z=a=(*z1)*(*m2)+(*z2)*(*m1);
m=b=(*m1)*(*m2);
do{
yu=a%b;
a=b;
b=yu;
}while(yu!=0);
*z2=z/a;
*m2=m/a;
}
总结:
1. 求最大公约数要用“辗转相除法”,效率较高。