社区讨论

80分求助

P1572计算分数参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhjsx2xq
此快照首次捕获于
2025/11/04 07:58
4 个月前
此快照最后确认于
2025/11/04 07:58
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b,f[10010],z[10010],m[10010],s,temp,n,ans,x;
int main(){
	ll i=1;
	scanf("%d/%d",&a,&b);
	char c;
	while(cin>>c){
		scanf("%d/%d",&z[i],&m[i]);
		if(c=='+') f[i]=1;
		else f[i]=-1;
		n=max(n,m[i]);
		i++;
	}
	ll l=i;
	for(i=n;;i++){
		if(i%b!=0) continue;
		bool f=true;
		for(ll j=1;j<=l-1;j++){
			if(i%m[j]!=0){
				f=false;
				break;
			}
		}
		if(f==true){
			s=i;
			break;
		}
	}
	ans=a*s/b;
	for(i=1;i<=l-1;i++) ans+=f[i]*z[i]*s/m[i];
	for(i=min(ans,s);i>=2;i--){
		if(ans%i==0 && s%i==0){
			ans/=i;
			s/=i;
		}
	}
	if(s<0){
		s=-s;
		ans=-ans;
	}
	if(ans%s==0) cout<<ans/s;
	else cout<<ans<<"/"<<s;
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...