原题链接
这道题说实话还是比较复杂的,对于有些简单的20分题目明显难了些。
最后一个测试点的分子是0,不注意处理的话会出现浮点错误,在细节上的实现也很重要,最后就是要记住辗转相除求最大公因数。
代码如下:
#include <stdio.h>
typedef struct{
int fz;
int fm;
}number;
int gcb(int x,int y){
int c,a=x,b=y;
while(a!=0){
c=b%a;
b=a;
a=c;
}
return b;
}
void pp(int x,int y,int m){
int t,a=x,b=y;;
while(gcb(a,b)!=1){
t=gcb(a,b);
a=a/t;
b=b/t;
}
if(a!=0){
if(m==1){
printf(" ");
}
printf("%d/%d",a,b);
}
}
int main(){
int n,i,m=0;
scanf("%d",&n);
number x[n];
for(i=0;i<n;i++){
scanf("%d/%d",&x[i].fz,&x[i].fm);
}
for(i=1;i<n;i++){
x[0].fz=x[0].fz*x[i].fm+x[0].fm*x[i].fz;;
x[0].fm=x[0].fm*x[i].fm;
}
if(x[0].fz==0){
printf("0");
}else{
if(x[0].fz/x[0].fm!=0){
printf("%d",x[0].fz/x[0].fm);
m=1;
}
pp(x[0].fz-(x[0].fz/x[0].fm)*x[0].fm,x[0].fm,m);
}
}