Pagini recente » Cod sursa (job #2222959) | Cod sursa (job #2689328) | Cod sursa (job #2268455) | Cod sursa (job #1675058) | Cod sursa (job #1752962)
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
const int nmx = 100002;
int l;
char s[nmx];
void citire()
{
scanf("%s", s);
l = strlen(s);
}
void reduceeeereee(int &st, int &dr)
{
while(s[st] == '(' && s[dr] == ')')
{
int nr = 1;
int pos = st + 1;
while(pos < dr)
{
if(s[pos] == '(')
++ nr;
if(s[pos] == ')')
-- nr;
if(nr == 0)
return;
++ pos;
}
++ st;
-- dr;
}
}
int eval(int st, int dr)
{
reduceeeereee(st,dr);
int nr = 0;
for(int i = dr; i >= st; --i)
{
if(s[i] == ')')
++ nr;
if(s[i] == '(')
-- nr;
if(s[i] == '+' && not nr)
return eval(st,i-1) + eval(i+1,dr);
else if(s[i] == '-' && not nr)
return eval(st,i-1) - eval(i+1,dr);
}
for(int i = dr; i >= st; --i)
{
if(s[i] == ')')
++ nr;
if(s[i] == '(')
-- nr;
if(s[i] == '*' && not nr)
return eval(st,i-1) * eval(i+1,dr);
else if(s[i] == '/' && not nr)
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);
citire();
printf("%d\n", eval(0,l-1));
return 0;
}