Pagini recente » Cod sursa (job #741341) | Cod sursa (job #2942276) | Cod sursa (job #1924165) | Cod sursa (job #2668832) | Cod sursa (job #1466629)
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxc 100005
using namespace std;
char s[maxc];
int semn(char semn)
{
if (semn=='+' || semn=='-')
return 1;
if (semn=='*' || semn=='/')
return 2;
return 3;
}
int calc(int st, int dr)
{
int nrp,ok;
while (s[st]=='(' && s[dr]==')')
{
ok=1;
nrp=1;
for (int i=st+1; i<dr; ++i)
{
if (s[i]=='(')
nrp++;
if (s[i]==')')
nrp--;
if (nrp==0)
{
ok=0;
break;
}
}
if (ok)
{
st++;
dr--;
}
else
break;
}
int p=0,minim=3,poz;
for (int i=dr;i>=st; --i)
{
if (s[i]==')')
p++;
if (s[i]=='(')
p--;
if (semn(s[i]) < minim && p==0)
{
minim= semn(s[i]);
poz=i;
if (minim==1)
break;
}
}
if (minim!=3)
{
if (s[poz]=='+')
return calc(st,poz-1)+calc(poz+1,dr);
if (s[poz]=='-')
return calc(st,poz-1)-calc(poz+1,dr);
if (s[poz]=='*')
return calc(st,poz-1)*calc(poz+1,dr);
if (s[poz]=='/')
return calc(st,poz-1)/calc(poz+1,dr);
}
else
{
int nr=0;
for (int i=st;i<=dr;i++)
nr=nr*10+s[i]-'0';
return nr;
}
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
cin.getline(s,maxc);
int l=strlen(s);
printf("%d",calc(0,l-1));
return 0;
}