Cod sursa(job #869358)

Utilizator anaid96Nasue Diana anaid96 Data 1 februarie 2013 15:14:23
Problema Evaluarea unei expresii Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include<stdio.h>
#include<string.h>
FILE *in,*out;

const int oo=(1<<30)-1;
int calcul(int left,int right);
char expresie[100001];
int main(void)
{
	in=fopen("evaluare.in","rt");
	out=fopen("evaluare.out","wt");
	fscanf(in,"%s",expresie);
	fprintf(out,"%d",calcul(0,strlen(expresie)-1));
	fclose(in);
	fclose(out);
	return 0;

}

int calcul (int left,int right)
{
	int paranteze=0;
	int gradmin=oo,grad;
	int pos;
	for(int i=left;i<=right;++i)
	{
		if(expresie[i]=='(')
			paranteze++;
		else
			if(expresie[i]==')')
				paranteze--;
			else
				if(expresie[i]=='+' || expresie[i]=='-')
				{	
					grad=paranteze*2;
					if(grad<=gradmin)
					{	
						gradmin=grad;
						pos=i;
					}	
				}
				else if(expresie[i]=='*' || expresie[i]=='/')
				{
					grad=paranteze*2+1;
					if(grad<=gradmin)
					{
						gradmin=grad;
						pos=i;
					}
				}	
					
			
	}
	if(gradmin!=oo)
	{
		left=calcul(left,pos-1);
		right=calcul(pos+1,right);
		
		if(expresie[pos]=='+')
			return left+right;
		else
			if(expresie[pos]=='-')
				return left-right;
			else
				if(expresie[pos]=='*')
					return left*right;
				else
					return left/right;
	}
	int num=0;
	for(int i=left;i<=right;++i)
		if(expresie[i]!='(' && expresie[i]!=')')
			num=num*10 + (expresie[i]-48);
	return num;	
}