解题思路:
1.
2.
3.
#include <iostream>
#include <cstdio>
using namespace std;
char c,a;//c字符用来读入,a是未知数名
int f=1,now=1,k,b,x;
//b用来表示常数部分的值,x表示该项未知数系数的值,k表示未知数系数的总值
//f表示这个数是正还是负,now表示这个数在等号左边还是右边
bool r;//用来判是否有数字读入
int main()
{
while(cin>>c)//每次都读入一个字符
{
if(c=='-')//如果读入的是-号
{
b+=now*f*x;//将常数项累加到b中
x=0;//系数清零
f=-1;//表示是负数,用于下一项判断
r=0;//判断是否有数字读入
}
if(c=='+')//如果读入的是+号
{
b+=now*f*x;//将常数项累加到b中
x=0;//系数清0
f=1;//表示是正数,用于下一项判断
r=0;
}
if(c=='=')//如果输入的是等号
{
b+=now*f*x;//将常数项累加到b中
x=0;//系数清0
f=1;//表示等号后面的初始为正,如果碰到-号,f会变成-1
now=-1;//将now变为-1,表示等号右边的移到左边的话系数*-1
r=0;
}
if(c>='a'&&c<='z')//如果输入了未知数字母
{
if(r==1)//表示该未知数前面有系数
{
k+=now*f*x;//将系数累加到k中
x=0;//系数重新清零,方便下一次系数累加
}
else//如果该未知数前面没有系数,根据f判断是1还是-1
k+=now*f;//将系数累加到k中
a=c;//将该未知数赋值给a
r=0;//r清零,用于判断下一个未知数是否有系数
}
if(c>='0'&&c<='9')//如果输入了数字
{
x=x*10+c-'0';//系数累加
r=1;//如果输入了数字,r变为1
}
}
b+=now*f*x;//加上最后一项常数(若最后一项是未知数则会加0)
double ans=double(-b*1.0/k);
if(ans==-0.0)
ans=0;//特判,将-0.0改为0
printf("%c=%.3lf",a,ans);//保留三位小数输出
return 0;
}