Cod sursa(job #1302436)

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

#include <fstream>

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

#include <algorithm>

using namespace std;

int eval(string &s, int &p);

int factor(string &s, int &p)
{
	int res;
	if (s[p] == '(') {
		p++;
		res = eval(s, p);
		p++;	/* to skip over ')' */
	} else {
		res = 0;
		while (s[p] >= '0' && s[p] <= '9') {
			res = res * 10 + s[p] - '0';
			p++;
		}
	}
	return res;
}

int term(string &s, int &p)
{
	int a = factor(s, p);
	while (s[p] == '*' || s[p] == '/') {
		char op = s[p];
		p++;
		int b = factor(s, p);
		if (op == '*') {
			a *= b;
		} else {
			a /= b;
		}
	}
	return a;
}

int eval(string &s, int &p)
{
	int a = term(s, p);
	while (s[p] == '+' || s[p] == '-') {
		char op = s[p];
		p++;
		int b = term(s, p);
		if (op == '+') {
			a += b;
		} else {
			a -= b;
		}
	}
	return a;
}

int main()
{
	ifstream in(IA_PROB".in");
	ofstream out(IA_PROB".out");
	int p;
	string s;
	in>>s;
	out<<eval(s, p);
	if (p != s.size()) {
		out<<"Error: read only "<<p<<" out of "<<s.size()<<" characters.";
	}
	return 0;
}