Cod sursa(job #2292260)

Utilizator livliviLivia Magureanu livlivi Data 29 noiembrie 2018 11:21:46
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
/// () -> * / -> + -

#include<fstream>
#include<string>
using namespace std;

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

string s;

int expresie(int& p);
int termen(int& p);
int factor(int& p);
int valoare(int& p);

/// a + b + c + d - e

int expresie(int& p){
	int ans = termen(p);

	while(p < s.size() && (s[p] == '+' || s[p] =='-')){
		int sign = (s[p]=='-' ? -1 : 1);
		p++;

		ans += sign * termen(p);
	}

	return ans;
}

/// a * b * c / d

int termen(int& p){
	int ans = factor(p);

	while(p < s.size() && (s[p] == '*' || s[p] == '/')){
		char op = s[p];
		p++;

		int aux = factor(p);

		if (op == '*') ans *= aux;
		else ans /= aux;
	}

	return ans;
}

/// (...)
/// -3 0 9

int factor(int& p){
	int ans;

	if (s[p] == '('){
		p++;
		ans = expresie(p);
		p++;
	}
	else ans = valoare(p);

	return ans;
}

int valoare(int& p){
	int sign = 1;
	if (s[p] == '-'){
		sign = -1;
		p++;
	}

	int ans = 0;
	while(p < s.size() && s[p] >= '0' && s[p] <= '9'){
		ans = ans * 10 + s[p] - '0';
		p++;
	}

	return ans * sign;
}

int main(){
	int p = 0;
	
	cin>>s;
	cout<<expresie(p)<<endl;

	return 0;
}