Pagini recente » Cod sursa (job #2635102) | Cod sursa (job #3269916) | Cod sursa (job #2131742) | Cod sursa (job #3256941) | Cod sursa (job #1562759)
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
char s[100002];
void reducere(int &st, int &dr){
int nr = 0;
for(int i = st; i <= dr; ++i){
if(s[i] == '(')
++ nr;
if(s[i] == ')')
-- nr;
if(nr == 0 && i < dr)
return;
if(nr && nr == dr - i){
st += nr;
dr -= nr;
return;
}
}
}
int eval(int st, int dr){
reducere(st,dr);
int nr = 0;
for(int i = dr; i >= st; --i){
if(s[i] == '(')
-- nr;
if(s[i] == ')')
++ nr;
if(not nr && s[i] == '+')
return eval(st,i-1) + eval(i+1,dr);
else if(not nr && s[i] == '-')
return eval(st,i-1) - eval(i+1,dr);
}
nr = 0;
for(int i = dr; i >= st; --i){
if(s[i] == '(')
-- nr;
if(s[i] == ')')
++ nr;
if(not nr && s[i] == '*')
return eval(st,i-1) * eval(i+1,dr);
else if(not nr && s[i] == '/')
return eval(st,i-1) / eval(i+1,dr);
}
return atoi(s+st);
}
int main(){
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", s);
printf("%d\n", eval(0,strlen(s)-1));
return 0;
}