求助猴子对线区的题
  • 板块灌水区
  • 楼主caramel_qwq
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/3/13 17:32
  • 上次更新2023/10/28 06:39:57
查看原帖
求助猴子对线区的题
444195
caramel_qwq楼主2022/3/13 17:32

求大佬帮调

输入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; 
} 
2022/3/13 17:32
加载中...