Cod sursa(job #754035)

Utilizator The_DisturbedBungiu Alexandru The_Disturbed Data 31 mai 2012 09:07:15
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<stdio.h>
#include<string.h>
char s[100013],*p;
int n;
int eval();
int termen();
int factor();
int main()
{
	freopen("evaluare.in","r",stdin);
	freopen("evaluare.out","w",stdout);
	gets(s);
	p=s;
	n=eval();
	printf("%d\n",n);
}
int eval()
{
	int r;
	r=termen();
	while(*p=='+'||*p=='-')
	switch (*p)
	{
	case '+':
		{
			++p;
			r+=termen();
			break;
		}
	case '-':
		{
			++p;
			r-=termen();
			break;
		}
	}
	return r;
}
int termen()
{
	int r;
	r=factor();
	while(*p=='*'||*p=='/')
	switch(*p)
	{
	case '*':
		{
			++p;
			r*=factor();
			break;
		}
	case '/':
		{
			++p;
			r/=factor();
			break;
		}
	}
	return r;
}
int factor()
{
	int r;
	r=0;
	if(*p=='(')
	{
		++p;
		r=eval();
		++p;
	}
	else
	{
		while('0'<=*p && *p<='9')
		{
			r*=10;
			r+=(int)*p-'0';
			++p;
		}
	}
	return r;
}