Cod sursa(job #1091191)

Utilizator pulseOvidiu Giorgi pulse Data 25 ianuarie 2014 13:36:48
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
#include <cstring>

using namespace std;

#define NMAX 100003

char s[NMAX], *p = s;

long Termen ();
long Factor ();

long Eval ()
{
	long r = Termen ();
	while (*p == '+' || *p == '-')
	{
		if (*p == '+')
		{
			++p;
			r += Termen ();
			break;
		}
		else if (*p == '-')
		{
			++p;
			r -= Termen ();
			break;
		}
	}
	return r;
}

long Termen ()
{
	long r = Factor ();
	while (*p == '*' || *p == '/')
	{
		if (*p == '*')
		{
			++p;
			r *= Factor ();
			break;
		}
		if (*p == '/')
		{
			++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);
	gets (s);
	printf ("%d", Eval ());
	return 0;
}