欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

计算器的改良

程序员文章站 2022-04-07 09:04:12
...

计算器的改良

SampleSample InputInput
6a-5+1=2-2a
SampleSample OutputOutput
a=0.750

TrainTrain ofof ThoughtThought

一元二次方程
最后可以化成kx+b=0kx + b = 0
再化简可得x=bkx = -\frac{b}{k}
所以只需要求出bb(将常数相加,等号右边的要1*-1)
kk(将未知数的系数相加,等号右边同上)

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n, m, l = 1, k, t = 1, tot;
char s, a;
int main()
{
	while(cin>>s)
	{
		if(s == '+')m += t * k * l, l = 1, tot = 0, k = 0;
		if(s == '-')m += t * k * l, l = -1, tot = 0, k = 0;
		if(s == '=')m += t * k * l, t = -1, tot = 0, k = 0, l = 1;
		if(s >= '0' && s <= '9')
		{
			k = k * 10 + s - '0', tot = 1;
		}
		if(s >= 'a' && s <= 'z')
		{
			a = s;
			if(tot)n += t * k * l;
			else n += l * t;
			k = 0, tot = 1;
		}
	}
	m += t * k * l;
	double ans = double(-m * 1.0 / n);
	if (ans == -0.0) ans = 0;
	printf("%c=%.3f", a, ans);
	return 0;
}
相关标签: 其他