Cod sursa(job #613603)

Utilizator sebii_cSebastian Claici sebii_c Data 1 octombrie 2011 15:40:43
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.73 kb
#include <ctype.h>
#include <stdio.h>
#include <string.h>

#define LMAX 2
char op[4][4] = {"+-", "*/", "^", ""};

#define NMAX 100010
char infix[NMAX], *p = infix;

int eval(int a, int b, char c)
{
	switch(c) {
		case '+': return a+b;
		case '-': return a-b;
		case '/': return a/b;
		case '*': return a*b;
	}
}

int expr(int lev)
{
	int x, y;

	if (lev == LMAX) 
		if (*p == '(')
			++p, x = expr(0), ++p;
		else
			for (x=0; *p>='0' && *p<='9'; ++p)
				x = x*10 + (*p - '0');
	else
		for (x = expr(lev+1); strchr(op[lev], *p); x=y)
			y = eval(x, expr(lev+1), *p++);
	return x;
}

int main()
{
	freopen("evaluare.in", "r", stdin);
	freopen("evaluare.out", "w", stdout);
	fgets(infix, NMAX, stdin);
	printf("%d\n", expr(0));
	return 0;
}