Cod sursa(job #1164624)

Utilizator SilverGSilver Gains SilverG Data 2 aprilie 2014 10:48:15
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
/*
	Keep It Simple!
*/

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

#include<cstdio>
#include<cstring>

char p[100005],*loc;
char operatii[4][4] = { "+-", "*/", "^", "" };

int EvaluateTerms(int a, int b, char op)
{
	if (op == '+')
		return a + b;
	if (op == '-')
		return a - b;
	if (op == '*')
		return a*b;
	if (op == '/')
		return a / b;
	return 1;
}

int Eval(int level)
{
	int x, y; 

	if (level == 2)
	{
		if (*loc == '(')
		{
			++loc; x = Eval(0); ++loc;
		}
		else
			for (x = 0; *loc >= '0' && *loc <= '9'; ++loc)
				x = x * 10 + (loc[0] - '0');
	}
	else
		for (x = Eval(level + 1); strchr(operatii[level], *loc) && *loc ; x = y)
			y = EvaluateTerms(x, Eval(level + 1), *loc++);
	return x;
}

int main()
{
	freopen("evaluare.in", "r", stdin);
	freopen("evaluare.out", "w", stdout);

	scanf("%s", p);
	loc = p;
	printf("%d",Eval(0));
}