Cod sursa(job #147010)

Utilizator damaDamaschin Mihai dama Data 2 martie 2008 15:08:16
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>
#include <ctype.h>


int eval();
int termen();
int factor();

int p;
char line[100010];

int main()
{
	freopen("evaluare.in", "r", stdin);
	freopen("evaluare.out", "w", stdout);

	fgets(line, 100010, stdin);
	printf("%d\n",eval());

	return 0;
}

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

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

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

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

int factor()
{
	int r = 0;

	if(line[p] == '(')
	{
		++p;
		r = eval();
		++p;
	}
	while(isdigit(line[p]))
	{
		r = 10 * r + line[p] - '0';
		++p;
	}
	return r;
}