60pts求助
查看原帖
60pts求助
320470
William_Takazaki楼主2022/10/17 20:53

rt

#include<bits/stdc++.h>
using namespace std;
typedef long long in;
in n,x,y,z,i,sfz,sfm,p;
string s,s1,s2;
in gcd(in a,in b){
	if(a%b!=0)return gcd(b,a%b);
	else return b;
}string add(int fz1,int fm1,int fz2,int fm2){//分数加法
	in nfm1,nfz1,nfm2,nfz2,nfz,nfm,x;
	nfm1=fm1*fm2;
	nfm2=nfm1;
	nfz1=fz1*(nfm1/fm1);
	nfz2=fz2*(nfm2/fm2);
	nfz=nfz1+nfz2;
	nfm=nfm2;
	x=gcd(nfz,nfm);
	while(x!=1){
		nfz/=x;
		nfm/=x;
		x=gcd(nfz,nfm);
	}if(nfz<0&&nfm>=0)return "-"+to_string(abs(nfz))+"/"+to_string(nfm);
	else if(nfm<0&&nfz>=0)return "-"+to_string(nfz)+"/"+to_string(abs(nfm));
	else if(nfz>=0&&nfm>=0)return to_string(nfz)+"/"+to_string(nfm);
	else return "-"+to_string(abs(nfz))+"/"+to_string(abs(nfm));
}string sub(int fz1,int fm1,int fz2,int fm2){//分数减法
	in nfm1,nfz1,nfm2,nfz2,nfz,nfm,x;
	nfm1=fm1*fm2;
	nfm2=nfm1;
	nfz1=fz1*(nfm1/fm1);
	nfz2=fz2*(nfm2/fm2);
	nfz=nfz1-nfz2;
	nfm=nfm2;
	x=gcd(nfz,nfm);
	while(x!=1){
		nfz/=x;
		nfm/=x;
		x=gcd(nfz,nfm);
	}if(nfz<0&&nfm>=0)return "-"+to_string(abs(nfz))+"/"+to_string(nfm);
	else if(nfm<0&&nfz>=0)return "-"+to_string(nfz)+"/"+to_string(abs(nfm));
	else if(nfz>=0&&nfm>=0)return to_string(nfz)+"/"+to_string(nfm);
	else return "-"+to_string(abs(nfz))+"/"+to_string(abs(nfm));
}int main(){
	cin>>n;
	for(i=1;i<=n;i++){
		cin>>x>>y>>z;
		if(z==1){
			if(i==1){
				sfz=x;
				sfm=y; 
			}else{
				s=add(sfz,sfm,x,y);
				p=s.find('/');
				s1=s.substr(0,p);
				s2=s.substr(p+1);
				sfz=stoll(s1);
				sfm=stoll(s2);
			}	
		}else{
			if(i==1){
				sfz=-x;
				sfm=-y;
			}else{
				s=sub(sfz,sfm,x,y);
				p=s.find('/');
				s1=s.substr(0,p);
				s2=s.substr(p+1);
				sfz=stoll(s1);
				sfm=stoll(s2);
			}
		}
	}if(sfz%sfm!=0)cout<<sfz<<'/'<<sfm;
	else cout<<sfz/sfm;
	return 0;
}
2022/10/17 20:53
加载中...