Cod sursa(job #296633)

Utilizator HaggisRanca Razvan Haggis Data 4 aprilie 2009 23:07:20
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.69 kb
#include<fstream>
#include<string>
using namespace std;
ifstream in ("evaluare.in");
ofstream out("evaluare.out");
char a[100001],s[100001],b[250001];
int i,l,k,k1,c[100001];

int main ()
{
	in.get(a,100001);
	l=strlen(a);
	a[l]='a';
	s[0]='a';
	k1=-1;
	
	while(a[i]!='a')
	{
		if(a[i]=='(')
			{
				s[++k]='(';
				i++;
			}
		if(a[i]==')')
			{
				while(s[k]!='(')
				{
					b[++k1]=s[k];
					b[++k1]='a';					
					s[k]=0;
					k--;
				}
			s[k]=0;
			k--;
			i++;
			}
		if(a[i]>='0' && a[i]<='9')
		{
			while(a[i]>='0' && a[i]<='9')
			{
				b[++k1]=a[i];
				i++;
			}
		b[++k1]='a';
		}
		if(a[i]=='-' || a[i]=='+')
			{
				while(s[k]!='(' && s[k]!=')' && s[k]!='a')
				{
					b[++k1]=s[k];
					b[++k1]='a';
					s[k]=0;
					k--;
				}
			s[++k]=a[i];
			i++;
			}
		if(a[i]=='*' || a[i]=='/')
			{
				while(s[k]=='*' || s[k]=='/')
				{
				b[++k1]=s[k];
				b[++k1]='a';
					s[k]=0;
					k--;
				}
			s[++k]=a[i];
			i++;
			}
		if(a[i]=='a')
			while(s[k]!='a')
			{
				b[++k1]=s[k];
				b[++k1]='a';
				s[k]=0;
				k--;
			}
	}
	s[0]=0;
	b[k1]='b';
	k=-1;
	i=0;
	while(i<k1)
	{
		if(b[i]=='-')
		{
			c[k-1]=c[k-1]-c[k];
			c[k]=0;
			k--;
			i+=2;
		}
		if(b[i]=='+')
		{
			c[k-1]=c[k-1]+c[k];
			c[k]=0;
			k--;
			i+=2;
		}
		if(b[i]=='*')
		{
			c[k-1]=c[k-1]*c[k];
			c[k]=0;
			k--;
			i+=2;
		}
		if(b[i]=='/')
		{
			c[k-1]=c[k-1]/c[k];
			c[k]=0;
			k--;
			i+=2;
		}
		if(b[i]>='0' && b[i]<='9')
			{int c1=0;
				while(b[i]>='0' && b[i]<='9')
				{
					c1=c1*10;
					c1+=b[i]-48;
					i++;
				}
			c[++k]=c1;
			i++;
			}
	}
	out<<c[0];
	return 0;
}