Cod sursa(job #1147547)

Utilizator L.DanielLungu Daniel L.Daniel Data 19 martie 2014 22:27:20
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <cstring>
using namespace std;

const int N = 100000, lvMax = 2;
const char lvOp[2][3] = { "+-", "*/" };

char s[N], *poz;

ifstream in("evaluare.in");
ofstream out("evaluare.out");

int expresie(), factor(), termen();

inline bool cifra(char c){
	return '0' <= c && c <= '9';
}

inline int getNumber(){
	int ans = 0;
	while (cifra(*poz)){
		ans = ans * 10 + *poz - '0';
		poz++;
	}
	return ans;
}

inline int eval(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 compute(int lv){
	if (lv == lvMax){
		if (cifra(*poz))
			return getNumber();
		poz++;
		int ans = compute(0);
		poz++;
		return ans;
	}
	int ans = compute(lv + 1);
	while (*poz && strchr(lvOp[lv], *poz)){
		poz++;
		ans = eval(ans, compute(lv + 1), *(poz - 1));
	}
	return ans;
}

int main(){
	in >> s;
	poz = s;
	out << compute(0) << "\n";
	return 0;
}