Cod sursa(job #339579)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 10 august 2009 14:13:16
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
#define N 1<<17
char v[N];
int poz=1;
int termen();
int factor();
int eval()
{
	int rez=termen();
	while (v[poz]=='+' || v[poz]=='-')
	{
		if (v[poz]=='+')
		{
			poz++;
			rez+=termen();
		}
		if (v[poz]=='-')
		{
			poz++;
			rez-=termen();
		}
	}
	return rez;
}
int termen()
{
	int rez=factor();
	while (v[poz]=='*' || v[poz]=='/')
	{
		if (v[poz]=='*')
		{
			poz++;
			rez*=factor();
		}
		if (v[poz]=='/')
		{
			poz++;
			rez/=factor();
		}
	}
	return rez;
}
int factor()
{
	int rez=0;
	if (v[poz]=='(')
	{
		poz++;
		rez=eval();
		poz++;
	}
	else
	{
		while (v[poz]>='0' && v[poz]<='9')
		{
			rez=rez*10+v[poz]-'0';
			poz++;
		}
	}
	return rez;
}
int main()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	fgets(v+1,N,stdin);
	printf("%d\n",eval());
	return 0;
}