Cod sursa(job #268001)

Utilizator luk17Luca Bogdan luk17 Data 28 februarie 2009 17:09:26
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<stdio.h>
#define NMAX 100001
char s[NMAX],*p=s;
long termen();
long factor();
long eval()
{
	long r=termen();
	while(*p=='+'||*p=='-')
	{
		switch(*p)
		{
		case '+':
			p++;
			r+=termen();
			break;
		case '-':
			p++;
			r-=termen();
			break;
		}
	}
	return r;
}
long termen()
{
	long 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>='0'&&*p<='9')
		{
			r=r*10+*p-'0';
			p++;
		}
		return r;
}
int main()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	scanf("%s",s);
	printf("%ld",eval());
	return 0;
}