我只是个准初中生,不要太高深,谢谢
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
struct dxs{
long long xs,we,zy;//分别为系数,是否未知数系数,在原方程左或右
};
int main(){
vector<dxs> a;
long long i=0,b=0,d,sum,w;
long long unxs=0,he=0;
double answer;
string input;
char unknown;
cin>>input;
dxs temp;
//读入各多项式
while(input[i]!='='){
w=0;
sum=0;
d=0;//+
if(input[i]=='-'){
d=1;
i++;
}
if(input[i]=='+'){
d=0;
i++;
}
while(isdigit(input[i])){
sum*=10;
sum+=input[i]-'0';
i++;
}
if(d==1) sum*=-1;
if(input[i]>='a'&&input[i]<='z'){
unknown=input[i];
i++;
w=1;
}
temp.xs=sum;
temp.we=w;
temp.zy=0;//left
a.push_back(temp);
b++;
}
i++;//'='前面到此结束
while(i<input.size()){
w=0;
sum=0;
d=0;//+
if(input[i]=='-'){
d=1;
i++;
}
if(input[i]=='+'){
d=0;
i++;
}//检测符号
while(isdigit(input[i])&&i<input.size()){
sum*=10;
sum+=input[i]-'0';
i++;
}
if(d==1) sum*=-1;//读入系数
if(input[i]>='a'&&input[i]<='z'&&i<input.size()){
unknown=input[i];
i++;
w=1;
}//是否为未知数系数
temp.xs=sum;
temp.we=w;
temp.zy=1;
a.push_back(temp);
b++;
//添至所有单项式数组
}
//移项,左边未知数,右边整数
for(long long i=0;i<b;i++){
if(a[i].we==1){
if(a[i].zy==1){
a[i].xs*=-1;
a[i].zy=0;
}
}
else{
if(a[i].zy==0){
a[i].xs*=-1;
a[i].zy=1;
}
}
}
//合并同类项
for(long long i=0;i<b;i++){
if(a[i].we==1){
unxs+=a[i].xs;
}
else{
he+=a[i].xs;
}
}
//系数化为1
answer=he*1.00/unxs;
if(answer==-0) answer=0;
printf("%c=%.3f",unknown,answer);
}