Cod sursa(job #298379)

Utilizator ilincaSorescu Ilinca ilinca Data 6 aprilie 2009 00:14:44
Problema Evaluarea unei expresii Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <stdio.h>

#define nmax 100005


char x [nmax], *p=x;


int eval ();
int termen ();
int factor ();

int main ()
{
	freopen ("evaluare.in", "r", stdin);
	freopen ("evaluare.out", "w", stdout);
	gets (x);
	printf ("%d\n", eval ());
	return 0;
}

int eval ()
{
	int r=factor ();
	if (*p == '+')
	{
		++p;
		r+=factor ();
	}
	else
		if (*p == '-')
		{
			++p;
			r-=factor ();
		}
	return r;
}

int termen ()
{
	int r=0;
	if (*p == '(')
	{
		++p;
		r=eval ();
		++p;
		return r;
	}
	for ( ; *p >= '0' && *p <= '9'; ++p)
		r=r*10 + *p-'0';
	return r;
}

int factor ()
{
	int r=termen ();
	while (*p == '*' || *p == '/')
	{
		if (*p == '*')
		{
			++p;
			r*=termen ();
		}	
		else
		{
			++p;
			r/=termen ();
		}
	}
	return r;
}