本题平台是给通过了,但是有一个不太懂的就是分子分母都是直接通分,竟然不会溢出。希望大佬能够指点一下,本纳米级小白刚学习什么都不会。
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int gcd(int m,int n); //求最大公约数
int main()
{
char ch;
int a[100],b[100];
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i]>>ch>>b[i];
}
int f1=a[0],f2=b[0];
for(int i=1;i<n;i++) //直接将所有分母通分 分子乘以对应的倍数 很玄学平台竟然给过了
{
f1=f1*b[i]+a[i]*f2;
f2*=b[i];
}
if(f1<0) //判断所求的分子是否为负数 是的话输出负号 并转化正数
{
cout<<'-';
f1*=-1;
}if(f1==0)
{
cout<<0;
return 0;
}
int r;
r=gcd(f1,f2); //除以最大公约数 进行分子和分母之间的约分
f1/=r;
f2/=r;
if(f1==f2)
cout<<1;
else if(f1<f2)
cout<<f1<<'/'<<f2;
else if(f1%f2==0)
cout<<f1/f2;
else cout<<f1/f2<<" "<<f1%f2<<'/'<<f2;
}
int gcd(int m,int n)
{
return n==0?m:gcd(n,m%n);
}