求大佬帮调
输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。 如:5/6、10/3均是最简形式,而3/6需要化简为1/2, 3/1需要化简为3。 分子和分母均不为0,也不为负数。
输入格式
第一行是一个整数n,表示分数个数,1 <= n <= 10;
接下来n行,每行一个分数,用"p/q"的形式表示,不含空格,p,q均不超过10。
蒟蒻的马蜂不太好看,请见谅
#include<bits/stdc++.h>
#define MAXN 18
using namespace std;
int n;
struct fenshu{
int fenzi,fenmu;
}a[MAXN];
fenshu ans;
void tongfen(int x){
int c=1;
for(int i=max(ans.fenmu,a[x].fenmu); ;i++){
if(i%ans.fenmu==0&&i%a[x].fenmu==0){
c=i/ans.fenmu;
ans.fenmu*=c;
ans.fenzi*=c;
c=i/a[x].fenmu;
a[x].fenmu*=c;
a[x].fenzi*=c;
break;
}
}
return ;
}
void yuefen(int mu,int zi){
int t=max(mu,zi);
for(int i=1;i<=t;i++){
if(mu%i==0&&zi%i==0){
mu/=i;
zi/=i;
}
}
if(mu==1){
cout<<zi<<"\n";
return ;
}
cout<<zi<<"/"<<mu<<"\n";
return ;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d/%d",&a[i].fenzi,&a[i].fenmu);
}
ans.fenzi=a[1].fenzi;
ans.fenmu=a[1].fenmu;
for(int i=2;i<=n;i++){
if(a[i].fenmu==ans.fenmu){
ans.fenzi+=a[i].fenzi;
}
if(a[i].fenmu!=ans.fenmu){
tongfen(i);
ans.fenzi+=a[i].fenzi;
}
}
yuefen(ans.fenmu,ans.fenzi);
return 0;
}