样例过了,自测也没问题,就是莫名全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;
}