Pagini recente » Cod sursa (job #1693159) | Cod sursa (job #390942) | Cod sursa (job #3211010) | Cod sursa (job #1921370) | Cod sursa (job #922225)
Cod sursa(job #922225)
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
char s[100010];
int n;
int capat(int x)
{
int sens, grad, i;
if(s[x]=='(')
sens=1;
else
sens=-1;
grad=1;
i=x;
while(grad)
{
i+=sens;
if(s[i]=='('||s[i]==')')
if(s[i]==s[x])
grad++;
else
grad--;
}
return i;
}
int eval(int st, int dr)
{
while(s[st] == '(' && capat(st) == dr)
st++,dr--;
int i;
for(i=dr;i>st;i--)
if(s[i]==')')
i=capat(i);
else if(s[i]=='+')
return eval(st,i-1)+eval(i+1,dr);
else if(s[i]=='-')
return eval(st,i-1)-eval(i+1,dr);
for(i=dr;i>st;i--)
if(s[i]==')')
i=capat(i);
else if(s[i]=='*')
return eval(st,i-1)*eval(i+1,dr);
else if(s[i]=='/')
return eval(st,i-1)/eval(i+1,dr);
int numar;
sscanf(s+st,"%d",&numar);
return numar;
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w", stdout);
gets(s);
n=strlen(s);
printf("%d", eval(0, n-1));
return 0;
}