Cod sursa(job #379554)

Utilizator GotenAmza Catalin Goten Data 2 ianuarie 2010 14:42:06
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include<fstream.h>	

char s[101000],b[101000];
int n,i,j,k,ps,a[101000],u,rez[101000];

int main()
{
	ifstream f("evaluare.in");
	ofstream g("evaluare.out");
	f.getline(s,101000);
	n=strlen(s);
	u=(1<<30);
	while(i<n)
	{
		if(48<=s[i]&&s[i]<=57)
		{
			j++;
			while(48<=s[i]&&s[i]<=57)
				a[j]=a[j]*10+s[i++]-48;
			i--;
		}
		else
			if(s[i]==40)
				b[++k]=s[i];
			else 
				if(s[i]==41)
				{
					ps=0;
					while(!ps)
					{
						if(b[k]==40)
							ps=1;
						else
							a[++j]=b[k]+u;
						k--;
					}
				}	
				else
				{
					if(s[i]==45)
						while(b[k]==47||b[k]==42||b[k]==43||b[k]==45)
							a[++j]=b[k--]+u;
					else
						if(s[i]==43)
							while(b[k]==42||b[k]==45||b[k]==47)
								a[++j]=b[k--]+u;
						else
							if(s[i]==42)
								while(b[k]==47)
									a[++j]=b[k--]+u;
							else
								while(b[k]==42||b[k]==47)
									a[++j]=b[k--]+u;	
					b[++k]=s[i];
				}
		i++;
	}
	for(i=k;i;i--)
		a[++j]=b[i]+u;
	i=1;
	k=0;
	while(i<=j)
	{
		rez[++k]=a[i];
		if(k>2&&rez[k-1]<u&&rez[k-2]<u&&rez[k]>u)
		{
			if(rez[k]==u+42)
				rez[k-2]=rez[k-2]*rez[k-1];
			else
				if(rez[k]==u+43)
					rez[k-2]=rez[k-2]+rez[k-1];
				else
					if(rez[k]==u+45)
						rez[k-2]=rez[k-2]-rez[k-1];
					else
						rez[k-2]=rez[k-2]/rez[k-1];
		k-=2;
		}
		i++;
	}
	g<<rez[1];
	return 0;
}