Cod sursa(job #1350133)

Utilizator cristian.enciuCristian Enciu cristian.enciu Data 20 februarie 2015 17:57:50
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<stdio.h>
#include<string.h>

using namespace std;

char oper[2][4] = {"+-", "*/"};
char s[100010];
int i, n;

int next(int);

int apply(char op, int val1, int val2)
{
	switch(op) {
		case '*' : val1 *= val2; break;
		case '/' : val1 /= val2; break;
		case '+' : val1 += val2; break;
		case '-' : val1 -= val2; break;
	}

	return val1;
}

int getElem()
{ 
	if(s[i] == '(') {
		++i;
		int rez = next(0);
		++i;
		return rez;
	}

	int x = 0;
	while(strchr("0123456789", s[i]) && i < n) {
		x = x * 10 + s[i] - '0';
		++i;
	}

	return x;
}

int next(int type)
{
	int rez = (type == 1) ? getElem() : next(type+1);
	if(i == n) return rez;

	char op = s[i]; ++i;
	while(strchr(oper[type], op)) {
		int val = (type == 0) ? next(1) : getElem();
		rez = apply(op, rez, val);
		
		if(i == n) {
			return rez;
		}

		op = s[i]; ++i;
	}

	--i;

	return rez;
}

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

	scanf("%s", s);
	n = strlen(s);

	printf("%d ", next(0));

	return 0;
}