Pagini recente » Cod sursa (job #90873) | Cod sursa (job #972089) | Cod sursa (job #36655) | Cod sursa (job #501894) | Cod sursa (job #1889291)
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
const int nmx = 100002;
char s[nmx];
void reduc_parant(int &st, int &dr)
{
while(s[st] == '(' && s[dr] == ')')
{
int k = 1;
for(int i = st + 1; i < dr; ++i)
{
if(s[i] == '(')
++ k;
else if(s[i] == ')')
-- k;
if(not k)
return;
}
++ st;
-- dr;
}
}
int eval(int st, int dr)
{
reduc_parant(st,dr);
int k = 0;
for(int i = dr; i >= st; --i)
{
if(s[i] == ')')
++ k;
else if(s[i] == '(')
-- k;
if(not k && s[i] == '+')
return eval(st,i-1) + eval(i+1,dr);
if(not k && s[i] == '-')
return eval(st,i-1) - eval(i+1,dr);
}
for(int i = dr; i >= st; --i)
{
if(s[i] == ')')
++ k;
else if(s[i] == '(')
-- k;
if(not k && s[i] == '*')
return eval(st,i-1) * eval(i+1,dr);
if(not k && 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;
}