Cod sursa(job #269758)

Utilizator ZillaMathe Bogdan Zilla Data 3 martie 2009 13:11:38
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<stdio.h>

#define Nmax 100100

int eval(),termen(),fact(),nr();
char buff[Nmax], *p;

int op1(char op,int a,int b)
{
	if (op == '*') return a*b;
	return a/b;
}

int op2(char op,int a,int b)
{
	if (op == '+') return a+b;
	return a-b;
}

int nr()
{
	int ret = 0;
	while ('0' <= *p && *p <= '9')
	{
		ret = ret*10 + *p - '0';
		++p;
	}
	return ret;
}

int termen()
{
	if ('0' <= *p && *p <= '9')
		return nr();
	++p;
	int ret = eval();
	++p;
        return ret;
}

int fact()
{
	int ret = termen();
	while (*p == '*' || *p=='/')
	{
		char op = *p;
		++p;
		ret = op1(op,ret,termen());
	}
	return ret;
}

int eval()
{
	int ret = fact();
	while (*p == '+' || *p == '-')
	{
		char op = *p;
		++p;
		ret = op2(op,ret,fact());
	}
	return ret;
}

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

	//fgets(buff,Nmax,stdin);
    fread(buff,1,Nmax,stdin);
        p = buff;

	printf("%d\n",eval());

	return 0;
}