Cod sursa(job #1349857)

Utilizator cristian.enciuCristian Enciu cristian.enciu Data 20 februarie 2015 15:33:37
Problema Evaluarea unei expresii Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<stdio.h>
#include<stack>
#include<string.h>

using namespace std;

char s[100010];
int i, n;

int next();

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;
		return next();
	}

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

	return x;
}

int next()
{
	int rez = getElem();
	if(i == n) return rez;

	char op = s[i]; ++i;
	while(op == '*' || op == '/') {
		int val = getElem();
		rez = apply(op, rez, val);
		
		if(i == n) {
			return rez;
		}

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

	if(op == ')' || i == n) return rez;

	return apply(op, rez, next());
}

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

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

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

	return 0;
}