Cod sursa(job #481286)

Utilizator acelasi7Tudor Maxim acelasi7 Data 31 august 2010 09:40:25
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<cstdio>
using namespace std;

char S[100010],*p=S;
long termen();
long factor();
long eval()
{
	long r;
	r=termen();
	while(*p=='+'||*p=='-')
	{
		switch(*p)
		{
			case'+':
				++p;
				r+=termen();
				break;
			case'-':
				++p;
				r-=termen();
				break;
		}
	}
	return r;
}
long termen()
{
	long r;
	r=factor();
	while(*p=='*'||*p=='/')
	{
		switch(*p)
		{
			case'*':
				++p;
				r*=factor();
				break;
			case'/':
				++p;
				r/=factor();
				break;
		}
	}
	return r;
}
long factor()
{
	long r=0;
	if(*p=='(')
	{
		++p;
		r=eval();
		++p;
	}
	else
	{
		while(*p<='9'&&*p>='0')
		{
			r=r*10+*p-'0';
			++p;
		}
	}
	return r;
}
int main()
{
	fgets(S,100010,fopen("evaluare.in","r"));
	fprintf(fopen("evaluare.out","w"),"%ld\n",eval());
	return 0;
}