Cod sursa(job #3193464)

Utilizator popuPop Matei Tudor popu Data 14 ianuarie 2024 17:49:13
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <cstring>
#include <ctype.h>
using namespace std;

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

char s[100005];
int pos;

/// recursivitate indirecta - declaram functiile inainte
int add(); /// se ocupa de + si -
int mult(); /// se ocupa de * si /
int fact(); /// se ocupa de () si factori

int add() {
	int res = mult();
	while (s[pos] == '+' || s[pos] == '-') {
		if (s[pos] == '+') {
			pos++;
			res += mult();
		}
		else {
			pos++;
			res -= mult();
		}
	}
	return res;
}

int mult() {
	int res = fact();
	while (s[pos] == '*' || s[pos] == '/') {
		if (s[pos] == '*') {
			pos++;
			res *= fact();
		}
		else {
			pos++;
			res /= fact();
		}
	}
	return res;
}

int fact() {
	int res = 0;
	if (s[pos] == '(') {
		pos++;
		res = add();
		pos++;
	}
		while (isdigit(s[pos])) {
			res = res * 10 + (s[pos] - '0');
			pos++;
		}
	return res;
}

int main() {

	f >> s;
	g << add();
	return 0;
}