Cod sursa(job #605905)

Utilizator Bit_MasterAlexandru-Iancu Caragicu Bit_Master Data 2 august 2011 18:43:40
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>

const int S = 100005;

char s[S];
char *p;

int termen();

int factor();

int eval()
{
	int r = termen();
	while (*p == '+' || *p == '-')
	{
		if (*p == '+')
		{
			++p;//peste semn
			r += termen();
		}
		if (*p == '-')
		{
			++p;//peste semn
			r -= termen();
		}
	}
	return r;
}

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

int factor()//factorul contine doar numere
{
	int r = 0;
	if (*p == '(')//ori o paranteza, ori un numar;
	{
		++p;//peste (
		r = eval();
		++p;//peste )
	}
	else
		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);
	gets(s);
	p = s;
	printf("%d",eval());
	return 0;
}