记录编号 463278 评测结果 AAAAA
题目名称 [NOIP 2000PJ]计算器的改良 最终得分 100
用户昵称 Gravatarwhite 是否通过 通过
代码语言 C++ 运行时间 0.001 s
提交时间 2017-10-23 21:25:40 内存使用 0.32 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <algorithm>
#include <string.h>
#include <cmath>
#include <queue>
#include <stack>
using namespace std;
string s;
int a[100][2],b[100][2];
int k=0,m=1,flag,temp1=0,temp2=0,temp3=0,temp4=0,nn=0;
char _y;
void deal()
{
	for(int i=0;i<100;i++)
	{
		a[i][0]=-1000;
		a[i][1]=-1000;
		b[i][0]=0;
		b[i][1]=0;
	}
	for(int i=0;i<s.length();i++)
	{
		while(s[i]>=48&&s[i]<=57)
		{
			a[k][0]=s[i]-'0';
			a[k][1]=-1;
			i++;
			k++;
		}
		if(s[i]>=97&&s[i]<=122)
		{
			_y=s[i];
			m=1;
			nn++;
			while(s[i-m]>=48&&s[i-m]<=57)
			{
				a[k-m][1]=1;//标记为字母前的系数;
				m++;
			}
		}
		else
		{
			if(s[i]=='-')
			{
				a[k][0]=11;//该位置位运算符
				a[k][1]=-10;//表示减号;
				k++;
			}
			if(s[i]=='+')
			{
				a[k][0]=11;
				a[k][1]=10;//表示加号;
				k++;
			}
			if(s[i]=='=')
			{
				flag=i-nn;
				a[k][1]=999;
				k++;
			}
		}
	}
}
void work()
{
	k=0;
	for(int i=0;i<flag;i++)
	{
		if(a[i][1]==-1)
		{
			b[k][0]=a[i][0];
			while(a[i][1]==a[i+1][1])
			{
				i++;
				b[k][0]=b[k][0]*10+a[i][0];
			}
			k++;
		}
		if(a[i][1]==1)
		{
			b[k][0]=a[i][0];
			b[k][1]=1;
			while(a[i][1]==a[i+1][1])
			{
				i++;
				b[k][0]=b[k][0]*10+a[i][0];
			}
			k++;
		}
		if(a[i][1]==10)
		{
			b[k][1]=10;
			k++;
		}
		if(a[i][1]==-10)
		{
			b[k][1]=-10;
			k++;
		}
	}
	for(int i=flag;i<s.length()-nn;i++)
	{
		if(i==flag)
		{
			flag=k;
			b[k][1]=999;
			k++;
			continue;
		}
		if(a[i][1]==-1)
		{
			b[k][0]=a[i][0];
			while(a[i][1]==a[i+1][1])
			{
				i++;
				b[k][0]=b[k][0]*10+a[i][0];
			}
			k++;
		}
		if(a[i][1]==1)
		{
			b[k][0]=a[i][0];
			b[k][1]=1;
			while(a[i][1]==a[i+1][1])
			{
				i++;
				b[k][0]=b[k][0]*10+a[i][0];
			}
			k++;
		}
		if(a[i][1]==10)
		{
			b[k][1]=10;
			k++;
		}
		if(a[i][1]==-10)
		{
			b[k][1]=-10;
			k++;
		}
	}
	for(int i=0;i<k;i++)//处理符号
	{
		if(b[i][1]==10)
			continue;
		if(b[i][1]==-10)
			b[i+1][0]=-b[i+1][0];
	}
	for(int i=0;i<k;i++)
	{
		if(i<flag)
		{
		    if(b[i][1]==1)
			    temp1+=b[i][0];
			if(b[i][1]==0)
				temp3+=b[i][0];
		}
		if(i>flag)
		{
			if(b[i][1]==1)
				temp2+=b[i][0];
			if(b[i][1]==0)
				temp4+=b[i][0];
		}
	}
}
int main(){
	freopen("computer.in","r",stdin);
	freopen("computer.out","w",stdout);
	cin>>s;
	deal();
	work();
	double _z=double((temp4-temp3))/double((temp1-temp2));
	cout<<_y<<'=';
	printf("%.3lf\n",_z);
	return 0;
}