记录编号 139662 评测结果 AAAAA
题目名称 [NOIP 2000PJ]计算器的改良 最终得分 100
用户昵称 Gravatar席一鸣 是否通过 通过
代码语言 C++ 运行时间 0.001 s
提交时间 2014-11-14 08:48:37 内存使用 0.31 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<iostream>
using namespace std;
char X;
double o=0,u=0;
int g(char*s,int p,int e) 
{
	int i,l=0;
	for(i=p;i<e;i++)
	{
		if(isdigit(s[i]))
			l++;
		else
			return l;
	}
	return l;
}
int m(char*s)
{
	int i=1,r=0;
	if(*s=='-')
		i=-1;
	else
		r=r*10+(*s-'0');
	s++;
	while(*s!='\0')
	{
		r=r*10+(*s-'0');
		s++;
	}
	return i*r;
}
void A(char*s,int L)
{
	char q[102],t[102];
	int i,e,n=0;
	if(s[n]=='-')
	{
		n++;
		if(n==L)
			return;
		if(s[n]==X)
		{
			u-=1;
			n++;
			if(n==L)
				return;
		}
		if(isdigit(s[n]))
		{
			e=g(s,n,L);
			memset(q,'\0',sizeof(q));
			for(i=0;i<e;i++)
				q[i]=s[i+n];
			n+=e;
			if(s[n]!=X)
				o+=m(q);
			else
			{
				u-=m(q);
				n++;
			}
		}
	}
	else
	{
		if(s[n]==X)
		{
			u+=1;
			n++;
			if(n==L)
				return;
		}
		if(isdigit(s[n]))
		{
			e=g(s,n,L);
			memset(t,'\0',sizeof(t));
			for(i=0;i<e;i++)
				t[i]=s[i+n];
			n+=e;
			if(s[n]!=X)
				o-=m(t);
			else
			{
				u+=m(t);
				n++;
			}
		}
	}
	while(n<L)
	{
		if(s[n]=='-')
		{
			n++;
			if(s[n]==X)
			{
				u-=1;
				n++;
				if(n==L)
					break;
			}
			if(isdigit(s[n]))
			{
				e=g(s,n,L);
				memset(t,'\0',sizeof(t));
				for(i=0;i<e;i++)
					t[i]=s[i+n];
				n+=e;
				if(s[n]!=X)
					o+=m(t);
				else
				{
					u-=m(t);
					n++;
				}
			}
		}
		if(s[n]=='+')
		{
			n++;
			if(s[n]==X)
			{
				u+=1;
				n++;
				if(n==L)
					break;
			}
			if(isdigit(s[n]))
			{
				e=g(s,n,L);
				memset(t,'\0',sizeof(t));
				for(i=0;i<e;i++)
					t[i]=s[i+n];
				n+=e;
				if(s[n]!=X)
					o-=m(t);
				else
				{
					u+=m(t);
					n++;
				}
			}
		}
	}
}
void B(char*s,int L)
{
	char q[102],t[102];
	int i,e,n=0;
	if(s[n]=='-')
	{
		n++;
		if(n==L)
			return;
		if(s[n]==X)
		{
			u+=1;
			n++;
			if(n==L)
				return;
		}
		if(isdigit(s[n]))
		{
			e=g(s,n,L);
			memset(q,'\0',sizeof(q));
			for(i=0;i<e;i++)
				q[i]=s[i+n];
			n+=e;
			if(s[n]!=X)
				o-=m(q);
			else
			{
				u+=m(q);
				n++;
			}
		}
	}
	else
	{
		if(s[n]==X)
		{
			u-=1;
			n++;
			if(n==L)
				return;
		}
		if(isdigit(s[n]))
		{
			e=g(s,n,L);
			memset(t,'\0',sizeof(t));
			for(i=0;i<e;i++)
				t[i]=s[i+n];
			n+=e;
			if(s[n]!=X)
				o+=m(t);
			else
			{
				u-=m(t);
				n++;
			}
		}
	}
	while(n<L)
	{
		if(s[n]=='-')
		{
			n++;
			if(s[n]==X)
			{
				u-=1;
				n++;
				if(n==L)
					break;
			}
			if(isdigit(s[n]))
			{
				e=g(s,n,L);
				memset(t,'\0',sizeof(t));
				for(i=0;i<e;i++)
					t[i]=s[i+n];
				n+=e;
				if(s[n]!=X)
					o-=m(t);
				else
				{
					u+=m(t);
					n++;
				}
			}
		}
		if(s[n]=='+')
		{
			n++;
			if(s[n]==X)
			{
				u-=1;
				n++;
				if(n==L)
					break;
			}
			if(isdigit(s[n]))
			{
				e=g(s,n,L);
				memset(t,'\0',sizeof(t));
				for(i=0;i<e;i++)
					t[i]=s[i+n];
				n+=e;
				if(s[n]!=X)
					o+=m(t);
				else 
				{
					u-=m(t);
					n++;
				}
			}
		}
	}
}
main()
{
	freopen("computer.in","r",stdin);
	freopen("computer.out","w",stdout);
	bool a=1;
	char c,r[100],l[100];
	float z;
	int b=0,v=0;
	cin>>c;
	while(c!='=')
	{
		if(a&&islower(c))
		{
			X=c;
			a=0;
		}
		l[b]=c; 
		b++;
		cin>>c;
	}
	cin>>c;
	while (!cin.eof())
	{
		if(a&&islower(c))
		{
			X=c;
			a=0;
		}
		r[v]=c;
		v++;
		cin>>c;
	}
	A(l,b);
	B(r,v);
	z=o/u;
	if(z>-0.0005&&z<=0)
		z=0;
	cout<<X<<"="<<setiosflags(ios::fixed)<<setprecision(3)<<z;
}