Pagini recente » Cod sursa (job #2573374) | Cod sursa (job #2372314) | Cod sursa (job #382952) | Cod sursa (job #1906449) | Cod sursa (job #1650371)
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
const int lmx = 100002;
char s[lmx];
void scad_paranteze(int &st, int &dr){
bool ok = 1;
while(ok){
int nr = 0;
for(int i = st; i <= dr; ++i){
if(s[i] == '(')
++ nr;
else if(s[i] == ')')
-- nr;
if(not nr && i < dr)
ok = 0;
}
if(ok){
++ st;
-- dr;
}
}
}
int eval(int st, int dr){
if(s[st] == '(' && s[dr] == ')')
scad_paranteze(st,dr);
int nr = 0;
for(int i = dr; i >= st; --i){
if(s[i] == ')')
++ nr;
else 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;
else 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;
}