Pagini recente » Cod sursa (job #336936) | Cod sursa (job #224832) | Cod sursa (job #1404858) | Cod sursa (job #1766757) | Cod sursa (job #2353880)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s[10005];
int l;
void verifparanteze(int &st , int &dr)
{
int nr=0,ok=1;
while(s[st]=='('&& s[dr]==')'&&nr==0 && ok==1)
{
nr=0;
for(int i=st+1;i<=dr-1 && ok==1;i++)
{
if(s[i]=='(')
nr++;
if(s[i]==')')
nr--;
if(nr<0)
ok=0;
}
if(nr==0&&ok==1)
{
dr--;
st++;
}
}
}
int cautsemn(int st,int dr,char s1,char s2)
{
int nr=0;
for(int i=dr; i>=st; i--)
{
if(s[i]==')')
nr++;
if(s[i]=='(')
nr--;
if(nr==0 && (s[i]==s1 || s[i]==s2))
return i;
}
return -1;
}
int num(int st,int dr)
{
int numar=0;
for(int i=st; i<=dr; i++)
numar=numar*10+(s[i]-'0');
return numar;
}
int solve(int st,int dr)
{
verifparanteze(st,dr);
int poz=cautsemn(st,dr,'+','-');
if(poz!=-1)
{
int e1=solve(st,poz-1);
int e2=solve(poz+1,dr);
if(s[poz]=='+')
return e1+e2;
return e1-e2;
}
poz=cautsemn(st,dr,'*','/');
if(poz!=-1)
{
int e1=solve(st,poz-1);
int e2=solve(poz+1,dr);
if(s[poz]=='*')
return e1*e2;
return e1/e2;
}
return num(st,dr);
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
scanf("%s",s);
l=strlen(s);
cout<<solve(0,l-1);
return 0;
}