#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
char unknown; //未知数
int eq;
for (int i = 0; i < s.size(); i++) {
if (s[i] >= 'A' && s[i] <= 'Z' || s[i] >= 'a' && s[i] <= 'z')
unknown = s[i];
if (s[i] == '=')
eq = i;
}
s+="=";
int c = 0; //常数
int x = 0; //系数
int last = 0;
for (int i = 1; i <= eq; i++) {
if (s[i] == '+' || s[i] == '-' || s[i] == '=') {
if (s[i - 1] != unknown)
c += stoi(s.substr(last, i - last));
else
{
if(i-last-1==0)
{
x++;
last = i;
continue;
}
if(i-last-1==1&&last!=0)
{
if(s[last]=='+')
x++;
else
x--;
last = i;
continue;
}
if(i-last-1==1&&last==0&&(s[0]=='+'||s[0]=='-'))
{
if(s[0]=='+')
x++;
else x--;
last = i;
continue;
}
x += stoi(s.substr(last, i - last - 1));
}
last = i;
}
}
last = eq + 1;
for (int i = eq + 2; i < s.size(); i++) {
if (s[i] == '+' || s[i] == '-' || s[i] == '=') {
if (s[i - 1] != unknown)
c -= stoi(s.substr(last, i - last));
else
{
if(i-last-1==0)
{
x--;
last = i;
continue;
}
if(i-last-1==1&&last!=eq+1)
{
if(s[last]=='+')
x--;
else
x++;
last = i;
continue;
}
if(i-last-1==1&&last==eq+1&&(s[last]=='+'||s[last]=='-'))
{
if(s[eq+1]=='+')
x++;
else x--;
last = i;
continue;
}
x -= stoi(s.substr(last, i - last - 1));
}
last = i;
}
}
double ans = -c*1.0/x;
if(ans!=0)
printf("%c=%.3lf",unknown,ans);
else printf("%c=0.000",unknown);
return 0;
}
代码主要就是分等号左右两边处理