Pagini recente » Cod sursa (job #1207168) | Cod sursa (job #2055166) | Cod sursa (job #2669746) | Profil Djojjo | Cod sursa (job #1979306)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
char s[100005];
void deparantezare(int &st,int &dr)
{
while(s[st] == '(' && s[dr] == ')')
{
int nr = 1;
for(int i=st+1; i<dr; i++)
{
if(s[i] == '(')
nr++;
else if(s[i] == ')')
nr--;
if(nr==0)
return;
}
st++;
dr--;
}
}
int rec(int st,int dr)
{
deparantezare(st,dr);
int nr = 0;
for(int i=dr; i>=st; i--)
{
if(s[i] == '(')
nr++;
else if(s[i] == ')')
nr--;
if((s[i] == '+' || s[i] == '-' ) && nr == 0)
{
if(s[i] == '+')
return rec(st,i-1) + rec(i+1,dr);
else
return rec(st,i-1) - rec(i+1,dr);
}
}
nr = 0;
for(int i=dr; i>=st; i--)
{
if(s[i] == '(')
nr++;
else if(s[i] == ')')
nr--;
if((s[i] == '*' || s[i] == '/')&&nr == 0)
{
if(s[i] == '*')
return rec(st,i-1) * rec(i+1,dr);
else
return rec(st,i-1) / rec(i+1,dr);
}
}
return atoi(s+st);
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
scanf("%s",s);
printf("%d",rec(0,strlen(s)-1));
return 0;
}