蒟蒻の求救,#2#4#5WA
查看原帖
蒟蒻の求救,#2#4#5WA
688247
liyihan1025楼主2022/10/20 17:08
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
inline int read(){
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
int c[30],m[30],ex[30];
int gcd(int x,int y){
	if(y>x) swap(x,y);
	if(x%y==0) return y;
	return gcd(y,x%y);
}
int lcm(int x,int y){
	return x*y/gcd(x,y);
}
signed main(){
	string expr;
	cin>>expr;
	if(expr[0]>='0'&&expr[0]<='9') expr="+"+expr;
	int p=0;
	for(int i=0;i<expr.size();i++){
		if(expr[i]=='/'){
			c[++p]=expr[i-1]-'0';
			m[p]=expr[i+1]-'0';
			ex[p]=expr[i-2];
		}
	}
	if(p<1) return 0;
	if(p==1){
		cout<<expr;
		return 0;
	}
	int l=lcm(m[1],m[2]);
	for(int i=3;i<=p;i++){
		l=lcm(l,m[i]);
	}
	int ansm=l;
	int ansc=0;
	for(int i=1;i<=p;i++){
		int x=ansm/m[i];
		m[i]*=x;
		c[i]*=x;
		if(ex[i]=='+') ansc+=c[i];
		else ansc-=c[i];
	}
	int gcm=gcd(abs(ansc),ansm);
	ansc/=gcm;
	ansm/=gcm;
	if(l==1) cout<<ansc;
	else cout<<ansc<<"/"<<ansm;
	return 0;
}

调3次了QAQ

2022/10/20 17:08
加载中...