Pagini recente » Cod sursa (job #2650405) | Cod sursa (job #666178) | Cod sursa (job #929308) | Cod sursa (job #2123031) | Cod sursa (job #1461702)
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
using namespace std;
char s[100000];
int verif(int l,int l1)
{
int k=0,k1=0;
for (int i=l;i<=l1; ++i)
if (s[i]=='(')
k++;
else if (s[i]==')')
k--;
if (k==0 && s[l1-1]==')' && s[l]=='(')
return 1;
if (k>0)
return 2;
else if (k<0)
return 3;
return 0;
}
int operatie(int l,int l1,char c1,char c2)
{
int ok=0,ok1=0;
for (int i=l1;i>=l; --i)
if (s[i]==')')
ok++;
else if (s[i]=='(')
ok--;
else if (s[i]==c1 && ok==0 || s[i]==c2 && ok==0)
return i;
return -1;
}
int rezolv(int l,int l1)
{
int x=verif(l,l1);
while (x)
{
if (x==1)
{
l++;
l1--;
}
else if (x==2)
l++;
else if (x==3)
l1--;
x=verif(l,l1);
}
int v=operatie(l,l1,'+','-');
if (v>=0)
{
if (s[v]=='+')
return rezolv(v+1,l1)+rezolv(l,v-1);
else if (s[v]=='-')
return rezolv(l,v-1)-rezolv(v+1,l1);
}
else
{
int v=operatie(l,l1,'/','*');
if (v>=0)
{
if (s[v]=='*')
return rezolv(v+1,l1)*rezolv(l,v-1);
else if (s[v]=='/')
return rezolv(l,v-1)/rezolv(v+1,l1);
}
else
{
int n=0;
for (int c=l;c<=l1;c++)
n=n*10+s[c]-'0';
return n;
}
}
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
scanf("%s",&s);
int l=strlen(s);
printf("%d",rezolv(0,l-1));
return 0;
}