Cod sursa(job #156292)

Utilizator raula_sanChis Raoul raula_san Data 12 martie 2008 14:25:40
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>
#include <string.h>

#define dim 100001

char S[dim], *p=S;

int Eval();

int Fact()
{
	int r = 0;
	if(*p == '(')
	{
		++ p;
		r = Eval();
		++ p;
	}
	else
	{
		while(*p >= '0' && *p <= '9')
		{
			r = r * 10 + (int) *p - '0';
			++ p;
		}
	}
	return r;
}

int Term()
{
	int r = Fact();
	while(*p == '*' || *p == '/')
	{
		if(*p == '*')
		{
			++ p;
			r *= Fact();
		}
		else if(*p == '/')
		{
			++ p;
			r /= Fact();
		}
	}
	return r;
}

int Eval()
{
	int r = Term();
	while(*p == '+' || *p == '-')
	{
		if(*p == '+')
		{
			++ p;
			r += Term();
		}
		else if(*p == '-')
		{
			++ p;
			r -= Term();
		}
	}
	return r;
}

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

	fgets(S, dim, stdin);

	printf("%d", Eval());

	fclose(stdin);
	fclose(stdout);

	return 0;
}