玄关求调
查看原帖
玄关求调
949182
taoruichen楼主2025/2/3 16:28

样例过了,自测也没问题,就是莫名全WA

#include <bits/stdc++.h>

using namespace std;

int num1,num2,sum1,sum2;
char un;
string s1,s2,tot;

void solve(string s,int &num,int &sum){
	if(s[0] != '-' && s[0] != '+') s = '+' + s;
	//此时每一项前面都有符号
	int l = 0,r = 0;
	while(l < s.size()){
		//保证l必为符号 
		int x = 0,w = 1; 
		for(r = l + 1;r < s.size();r++){
			if(s[r] == '+' || s[r] == '-') break;
		}
		r--;
		//此时s[l~r-1]是一个合法整体
		if(s[l] == '-') w = -1;
		for(int i = l + 1;i <= r - 1;i++){
			x = (x * 10) + (s[i] - '0'); 
		}
			//剔除最后一位s[r],因为它可能是字母也可能是数字,单独处理
		if(s[r] >= 'a' && s[r] <= 'z'){
			un = s[r];
			//是一次项
			if(x == 0) x = 1;
			sum += x * w;
		}else{
			//是数字
			x = (x * 10) + (s[r] - '0');
			num += x * w; 
		}
		l = r + 1;
	}
} 

int main(){
	getline(cin,tot);
	int div = tot.find("=");
	s1 = tot.substr(0,div);
	s2 = tot.substr(div + 1);
	solve(s1,num1,sum1);
	solve(s2,num2,sum2);
	sum1 -= sum2;
	num2 -= num1;
	cout << un << "=";
	double ans = 1.0 * num2 / sum1;
	if(ans == -0.0) ans = 0;
	cout << fixed << setprecision(3) << ans << endl;
	return 0;
}

2025/2/3 16:28
加载中...