Cod sursa(job #1091220)

Utilizator pulseOvidiu Giorgi pulse Data 25 ianuarie 2014 14:40:05
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include <cstring>

using namespace std;

#define NMAX 100003

char s[NMAX], *p = s;

int Termen ();
int Factor ();

int Eval ()
{
	int r = Termen ();
	while (*p == '+' || *p == '-')
	{
		switch (*p)
		{
			case '+':
			{
				++p;
				r += Termen ();
				break;
			}
			case '-':
			{
				++p;
				r -= Termen ();
				break;
			}
		}
	}
	return r;
}

int Termen ()
{
	int r = Factor ();
	while (*p == '*' || *p == '/')
	{
		switch (*p)
		{
			case '*':
			{
				++p;
				r *= Factor ();
				break;
			}
			case '/':
			{
				++p;
				r /= Factor ();
				break;
			}
		}
	}
	return r;
}

int Factor ()
{
	int 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);
	gets (s);
	printf ("%d\n", Eval ());
	return 0;
}