107013 - 计算器的改良

题解byqijitong


char c,a;
int f=1,now=1,k,b,x;//f表示这一项的系数的正负,x则为系数,n为等号在左或右, b为常数的值; 
double ans;//解 
bool r;//是否有系数 
int main()
{
	while(cin>>c)
	{
		if(c=='-') {b+=now*f*x;x=0;f=-1;r=0;}// 减号处理
		if(c=='+') {b+=now*f*x;x=0;f=1;r=0;} //加号处理 
		if(c == '=') {b+=now*f*x;x=0;f=1;now=-1;r=0;}//等于号处理,位置改为-1 
		if(c>='a' && c<='z')//变量的处理 
		{
			if(r!=0)
			{
				k+=now*f*x;x=0;
			}
			else k+=now*f;
			a=c;r=0;
		}
		if(c>='0'&&c<='9') {x=x*10+c-'0';r=1;}//常量的处理 
	}
	b+=now*f*x;//加上最后一项常数,是未知数则会加0
    if(ans==-0.0) ans=0;//加特判 
	printf("%c=%.3lf",a,ans);//输出(保留三位小数) 
	return 0;
}