Cod sursa(job #1091222)

Utilizator pulseOvidiu Giorgi pulse Data 25 ianuarie 2014 14:41:59
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 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 == '-')
	{
		if (*p == '+')
		{
			++p;
			r += Termen ();
			break;
		}
		if (*p == '-')
		{
			++p;
			r -= Termen ();
			break;
		}
	}
	return r;
}

int Termen ()
{
	int r = Factor ();
	while (*p == '*' || *p == '/')
	{
		if (*p == '*')
		{
			++p;
			r *= Factor ();
			break;
		}
		if (*p == '/')
		{
			++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;
}