Pagini recente » Cod sursa (job #1817716) | Cod sursa (job #3149856) | Cod sursa (job #845573) | Cod sursa (job #1086303) | Cod sursa (job #1730129)
#include <iostream>
#include <fstream>
#include <cassert>
#define cout g
using namespace std;
string opLevel[2] = {"+-", "*/"};
int eval(int a, char op, int b){
switch(op){
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
default: assert(false);
}
}
int solve(string::iterator &it, int lev){
int a,b;
if(lev == 2){
if(*it == '('){
++it;
a = solve(it, 0);
++it;
}
else
for(a = 0; *it >= '0' && *it <= '9'; ++it)
a = a * 10 + *it - '0';
}
else{
a = solve(it, lev+1);
while(opLevel[lev].find(*it) != string::npos){
char op = *it;
b = eval(a, op, solve(++it, lev+1));
a = b;
}
}
return a;
}
int main()
{
string s;
ifstream f("evaluare.in");
f >> s;
f.close();
string::iterator it = s.begin();
ofstream g("evaluare.out");
cout << solve(it, 0);
g.close();
return 0;
}