要注意最后一个测试点会出现浮点错误(就是结果分子出现0的情况......吧?)所以在gcd这加一个a==0的就可以啦(因为分母不可能是0所以就不用管啦)
#include<iostream>
#include<algorithm>
using namespace std;
long long gcd(long long a,long long b){
if(a==0)return 1; //浮点错误就是a为0时会报错
return b%a==0? a : gcd(b%a,a);
}
int main(){
int n;
long long a[100],b[100],num=0,den=1,same=0;
scanf("%d",&n);
if(n==0){
printf("0");
return 0;
}
for(int i=0;i<n;i++){
scanf("%lld/%lld",&a[i],&b[i]);
den=den/gcd(den,b[i])*b[i];
}
for(int i=0;i<n;i++)num+=den/b[i]*a[i];
same=abs(gcd(num,den));
num/=same;
den/=same;
if (num==0)printf("0");
else if(den==1)printf("%lld",num);
else if(abs(num)>den)printf("%lld %lld/%lld",num/den,num%den,den);
else printf("%lld/%lld",num,den);
return 0;
}