Cod sursa(job #160585)

Utilizator marinaMarina Horlescu marina Data 16 martie 2008 12:26:24
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 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 == '-')
		switch(*p)
		{
		case '+': ++p;r+=termen();break;
		case '-': ++p;r-=termen();break;
		}
	return r;
}

int termen()
{
	int r = factor();
	while(*p == '*' || *p == '/')
		switch(*p)
		{
		case '*': ++p;r*=factor();break;
		case '/': ++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;
}