Cod sursa(job #160598)

Utilizator marinaMarina Horlescu marina Data 16 martie 2008 12:36:27
Problema Evaluarea unei expresii Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
//Evaluare expresii
#include <stdio.h>
#define INPUT "evaluare.in"
#define OUTPUT "evaluare.out"
#define MAX 100001

char E[MAX], *p = E;

int eval();
int termen();
int factor();

int main()
{
	freopen(INPUT, "r", stdin);
	freopen(OUTPUT, "w", stdout);
	
	scanf("%s\n", E);
	
	printf("%d\n", eval());
	return 0;
}

int eval()
{
	int r = termen();
	while(*p == '+' || *p == '-')
		if(*p == '+')
		{
			++p;r+=termen();
		}
		else
		{
			++p;r-=termen();
		}
	return r;
}

int termen()
{
	int r = factor();
	while(*p == '*' || *p == '/')
		if(*p == '*')
		{
			++p;r*=factor();break;
		}
		else
		{
			++p;r/=factor();break;
		}
	return r;
}

int factor()
{
	int r = 0;
	if(*p == '(')
	{
		++p;
		r = eval();
		++p;
	}
	else
		while(*p>='0' && *p<='9')
		{
			r = r*10 + *p - '0';
			++p;
		}
	return r;
}