Cod sursa(job #2812509)

Utilizator ItsTheFBIaaa Dani ItsTheFBI Data 4 decembrie 2021 17:07:08
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cctype>
#include <iostream>
#include <string>
#define E __expression
#define T __termen
#define F __factor

int __expression();
int __termen();
int __factor();

static int p = 0;
static std::string s;

int __expression() {
	int ans = T();

	while (s[p] == '+' || s[p] == '-') {
		if (s[p] == '+') {
			p++;
			ans += T();
		} else {
			p++;
			ans -= T();
		}
	}

	return ans;
}

int __termen() {
	int f = F();
	while (s[p] == '*' || s[p] == '/') {
		if (s[p] == '*') {
			p++;
			f *= F();
		} else {
			p++;
			f /= F();
		}
	}

	return f;
}

int __factor() {  // nr sau exp
	int r;
	if (s[p] == '(') {
		p++;
		r = E();
		p++;
	} else {
		r = 0;
		while (isdigit(s[p])) {
			r = r * 10 + (s[p] - '0');
			p++;
		}
	}

	return r;
}

int main(int argc, char **argv) {
	freopen("evaluare.in", "r", stdin);
	freopen("evaluare.out", "w", stdout);
	std::cin >> s;
	std::cout << E() << std::endl;
	return 0;
}