这道题看着很难,但其实只要弄清楚输入输出就只是语法题,很多部分细节处理一下就好了,这里用到了GCD的板子
AC代码:
#include <iostream>
#define int long long
using namespace std;
struct node{
int fenzi,fenmu;
}num[110];
int GCD(int a,int b)//求最大公约数
{
if (a == 0) return 0;
else return (b==0)?a:GCD(b,a%b);
}
signed main() {
int n;cin>>n;
int mu=1;
int zi=0;
char c;
for(int i=1;i<=n;i++)
{
cin>>num[i].fenzi>>c>>num[i].fenmu;
mu *= num[i].fenmu;
}
for(int i=1;i<=n;i++)
{
if(num[i].fenmu!=mu){
num[i].fenzi*=abs((mu/num[i].fenmu));
}
zi += num[i].fenzi;
}
if(zi==0){
printf("0\n");
}
else{
if(abs(zi)<abs(mu)){
int a = abs(GCD(zi, mu));
printf("%lld/%lld",zi/a,mu/a);
}else{
if(abs(zi)%abs(mu)!=0){
int qian = zi / mu;
zi = zi - mu * qian;
int a = abs(GCD(zi, mu));
printf("%lld %lld/%lld",qian,zi/a,mu/a);
}
else{
zi /= mu;
printf("%lld",zi);
}
}
}
return 0;
}