Pagini recente » Cod sursa (job #1285335) | Cod sursa (job #581791) | Solutii preONI 2008, Runda 1 | Cod sursa (job #2670050) | Cod sursa (job #2855545)
#include <bits/stdc++.h>
#define LMAX 2 // nivelul maxim de prioritate
#define NX 100010
using namespace std;
vector<string> op={"+-","*/","^",""};
string S;
string::iterator p;
int eval( int a, int b, char o ) {
switch( o ) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
}
return 0;
}
int expr( int lev ) {
int x, y;
if( lev == LMAX ){
if( *p == '(' ){
++p;
x = expr(0);
++p;
}
else{
for( x = 0; *p >= '0' && *p <= '9'; ++p ){
x = x * 10 + *p - '0';
}
}
}
else{
for(x = expr(lev+1); op[lev][0]==*p || op[lev][1]==*p; x = y ){
y = eval( x, expr(lev+1), *p++ );
}
}
return x;
}
int main() {
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
cin>>S;
p=S.begin();
cout<<expr(0);
return 0;
}