Cod sursa(job #202834)

Utilizator razvan2006razvan brezulianu razvan2006 Data 11 august 2008 19:24:20
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
#define N 100002

char s[N];
int p = 0;

int termen();
int factor();

int eval()
{
	int r = termen();

	while(s[p] == '+' || s[p] == '-')
		if(s[p] == '+')
		{
			p++;
			r += termen();
		}
		else
		{
			p++;
			r -= termen();
		}

	return r;
}

int termen()
{
	int r = factor();

	while(s[p] == '*' || s[p] == '/')
		if(s[p]=='*')
		{
			p++;
			r *= factor();
		}
		else
		{
			p++;
			r /= factor();
		}

	return r;
}

int factor()
{
	int r = 0;

	if(s[p] == '(')
	{
		p++;
		r = eval();
		p++;
	}
	else
		while(s[p] >= '0' && s[p] <= '9')
		{
			r = r * 10 + s[p] - '0';
			p++;
		}

	return r;
}

int main()
{
	freopen("evaluare.in", "rt", stdin);
	freopen("evaluare.out", "wt", stdout);

	scanf("%s", s);

	printf("%d", eval());
}