Cod sursa(job #351798)

Utilizator Bit_MasterAlexandru-Iancu Caragicu Bit_Master Data 29 septembrie 2009 13:21:37
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>

#define S 100000

char s[S],*p=s;

int termen();

int factor();

int eval()
{
	long r = termen();
	while ((*p == '+')||(*p == '-'))
	{
		if (*p == '+')
		{
			++p;
			r += termen();
		}
		else
		{
			++p;
			r -= termen();
		}
	}
	return r;
}

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

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

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