Cod sursa(job #682434)

Utilizator BabutaRaresBabuta Rares Mihai BabutaRares Data 18 februarie 2012 23:20:54
Problema Evaluarea unei expresii Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
FILE *f=fopen("evaluare.in","r");
FILE *g=fopen("evaluare.out","w");
int main()
{
	int st1[100000],st2[100000],v[100000],vf1=0,vf2=0,i,j,k=0,x,k1=0;	
	char s[100001],nr[9];	
	fscanf(f,"%s",&s);
	for(i=0;i<=strlen(s);i++)
	{
		if(s[i]>='0'&&s[i]<='9')
			nr[k++]=s[i];
		else
		{
			nr[k]='\0';
			if(k>0)
			{
			k=0;		
			x=atoi(nr);
			v[++k1]=x;
			}
			if(s[i]=='*')
				st1[++vf1]=-1;
			if(s[i]=='/')
				st1[++vf1]=-2;
			if(s[i]=='(')
				st1[++vf1]=-5;
			if(s[i]=='+'||s[i]=='-')
			{
				while(st1[vf1]==-2||st1[vf1]==-1)
				{
					v[++k1]=st1[vf1--];
				}
				if(s[i]=='+')
					st1[++vf1]=-3;
				else
					st1[++vf1]=-4;
			}
			if(s[i]==')')
			{
				while(st1[vf1]!=-5)
					v[++k1]=st1[vf1--];
				vf1--;
			}
		}
	}
	
	while(vf1!=0)
		v[++k1]=st1[vf1--];
	for(i=1;i<=k1;i++)
	{
		if(v[i]>=0)
			st2[++vf2]=v[i];
		else
		{
			if(v[i]==-1)
				st2[vf2-1]=st2[vf2-1]*st2[vf2];
			if(v[i]==-2)
				st2[vf2-1]=st2[vf2-1]/st2[vf2];
			if(v[i]==-3)
				st2[vf2-1]=st2[vf2-1]+st2[vf2];
			if(v[i]==-4)
				st2[vf2-1]=st2[vf2-1]-st2[vf2];
			vf2--;}

		}
		fprintf(g,"%d",st2[1]);
}