Cod sursa(job #2196052)

Utilizator flibiaVisanu Cristian flibia Data 18 aprilie 2018 10:41:17
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#pragma GCC optimize("03")
#include <bits/stdc++.h>

using namespace std;

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

string s;
int sz, p;

int prior();
int termen();

int eval(){
	int nr = prior();
	while(p < sz && (s[p] == '+' || s[p] == '-')){
		if(s[p] == '+'){
			p++;
			nr += prior();
		} else {
			p++;
			nr -= prior();
		}
	}
	return nr;
}

int prior(){
	int nr = termen();
	while(p < sz && (s[p] == '*' || s[p] == '/')){
		if(s[p] == '*'){
			p++;
			nr *= termen();
		} else {
			p++;
			nr /= termen();
		}
	}
	return nr;
}

int termen(){
	int nr = 0;
	if(s[p] == '('){
		p++;
		nr = eval();
		p++;
	} else {
		while(p < sz && (s[p] >= '0' && s[p] <= '9'))
			nr = 10 * nr + s[p++] - '0';
	}
	return nr;
}

int main(){
	in >> s;
	sz = s.size();
	out << eval();
	return 0;
}