Cod sursa(job #1302491)

Utilizator whoasdas dasdas who Data 26 decembrie 2014 22:51:40
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#define IA_PROB "evaluare"

#include <cstdio>
#include <cstring>

#include <fstream>

#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <stack>

#include <algorithm>

using namespace std;


#define MAX_LEVEL 2

int op_level(char op)
{
	switch (op) {
	case '+':
	case '-':
		return 0;
	case '*':
	case '/':
		return 1;
	default:
		return MAX_LEVEL;
	}
}

int op_eval(char op, int a, int b)
{
	switch (op) {
	case '+': return a + b;
	case '-': return a - b;
	case '*': return a * b;
	case '/': return a / b;
	default:
		throw new exception();
	}
}

int expr_eval(char *&p, int level)
{
	int res;

	if (level < MAX_LEVEL) {
		res = expr_eval(p, level + 1);
		while (op_level(*p) == level) {
			char op = *p;
			p++;
			int b = expr_eval(p, level + 1);
			res = op_eval(op, res, b);
		}
	} else {
		if (*p == '(') {
			p++;
			res = expr_eval(p, 0);
			p++; /* to skip over ')' */
		} else {
			res = 0;
			while (*p >= '0' && *p <= '9') {
				res = res * 10 + *p - '0';
				p++;
			}
		}
	}
	return res;
}

int main()
{
	ifstream in(IA_PROB".in");
	ofstream out(IA_PROB".out");
	string s;
	in>>s;
	char *p = (char*)s.c_str();
	out<<expr_eval(p, 0)<<endl;

	return 0;
}