//细节比较烦人,注意0和负号的问题
#include<stdio.h>
#include<math.h>
#define A 100
int gcd(int x,int y){
int t;
if(x>y)
t=x,x=y,y=t;
for(t=x;t>0;t--)
if(x%t==0&&y%t==0) return t;
}
int main(){
int N,mo[A],de[A]; //mo为分子,de为分母
scanf("%d",&N);
for(int i=0;i<N;i++)
scanf("%d/%d",&mo[i],&de[i]);
int x=mo[0],y=de[0];
for(int i=1;i<N;i++){
x=x*de[i]+y*mo[i];
y=y*de[i]; //分数加法法则
int num=gcd(abs(x),abs(y)); //num为x,y的最大公因数
if(num!=0) x/=num,y/=num; //对x,y约分
}
if(y<0) x=-x,y=-y;
if(x!=0&&x/y==0) printf("%d/%d",x,y); //真分数
else if(x%y==0&&y!=0) printf("%d",x/y); //整数
else printf("%d %d/%d",x/y,x%y,y); //假分数
return 0;
}
团体程序设计天梯赛练习(20分题目)
最新推荐文章于 2023-04-26 22:58:51 发布