Cod sursa(job #2115120)

Utilizator flibiaVisanu Cristian flibia Data 26 ianuarie 2018 12:37:24
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
//recursie ;d
#include <bits/stdc++.h>


using namespace std;

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

string s;
int p, sz;

int prior();
int number();

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 = number();
	while(p < sz && (s[p] == '*' || s[p] == '/')){
		if(s[p] == '*'){
			p++;
			nr *= number();
		} else{
			p++;
			nr /= number();	
		}
	}
	return nr;
}

int number(){
	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] - 48;
			p++;
		}
	}
	return nr;
}

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