Cod sursa(job #428654)

Utilizator miticaMitica mitica Data 29 martie 2010 14:12:25
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
# include <stdio.h>
# define nmax 100005

char s[nmax],*p;

long termen();
long factor();

long eval()
{
	long r=termen();
	while (*p=='+' || *p=='-')
	{
		switch (*p){
		case '+':
			++p;
			r+=termen();
			break;
		case '-':
			++p;
			r-=termen();
			break;
		}
	}
	return r;
}

long termen()
{
	long r=factor();
	while (*p=='*' || *p=='/')
	{
		switch (*p){
		case '*':
			++p;
			r*=factor();
			break;
		case '/':
			++p;
			r/=factor();
			break;
		}
	}
	return r;
}

long factor()
{
	long r=0;
	if (*p=='(')
	{
		++p;
		r=eval();
		++p;
	}
	else
	{
		while (*p>='0' && *p<='9')
		{
			r=r*10+(*p-'0');
			++p;
		}
	}
	return r;
}

int main()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	fgets(s,nmax,stdin);
	p=s;
	printf("%ld\n", eval());
	return 0;
}