Pagini recente » Cod sursa (job #1116266) | Cod sursa (job #1390762) | Cod sursa (job #2598180) | Cod sursa (job #899011) | Cod sursa (job #1122683)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define min(a, b) a<b?a:b
using namespace std;
int n, par[100014], it;
char s[100014];
void formpar(int g)
{
for(it; it<strlen(s); it++){
if(s[it] == '('){
it++;
formpar(it-1);
}
if(s[it] == ')'){
par[g] = it;
par[it] = g;
it++;
return;
}
}
}
int oper(char c, int x, int y)
{
if(c=='+')
return x+y;
if(c=='-')
return x-y;
if(c=='*')
return x*y;
if(c=='/')
return x/y;
}
int number(int x, int y)
{
int p=0;
for(int i=x; i<=y; i++)
p = p*10+(s[i]-'0');
return p;
}
int solve(int st, int dr)
{
int ok=0;
if(s[st]=='(' && par[st]==dr){
st++;
dr--;
}
for(int i=dr; i>=st; i--){
if(s[i]==')')
i = par[i];
else if(s[i] == '+' || s[i] =='-')
return (oper(s[i], solve(st, i-1), solve(i+1, dr)));
}
for(int i=dr; i>=st; i--){
if(s[i]==')')
i = par[i];
else if(s[i] == '*' || s[i] =='/')
return (oper(s[i], solve(st, i-1), solve(i+1, dr)));
}
int aux;
sscanf(s+st, "%d", &aux);
return aux;
}
int main()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
gets(s);
formpar(0);
n = strlen(s);
printf("%d", solve(0, n-1));
return 0;
}