Cod sursa(job #503627)
# include <stdio.h>
# include <string.h>
int c[100005],k,l,n,i,nr,s[100005];
char ch,st[100005],a[100007];
void form (int &nr)
{
int x=ch-48;
while (scanf ("%c",&ch)!=EOF && ch>='0' && ch<='9')
{
x=x*10+(ch-48);
}
nr=x;
}
void add (char ch)
{
l++;
st[l]=ch;
}
void scoate (char ch)
{
if (ch=='+')
{
k++;
c[k]=-1;
}
if (ch=='-')
{
k++;
c[k]=-2;
}
if (ch=='*')
{
k++;
c[k]=-3;
}
if (ch=='/')
{
k++;
c[k]=-4;
}
}
int main ()
{
freopen("evaluare.in","r",stdin);
freopen ("evaluare.out","w",stdout);
while (scanf ("%c",&ch)!=EOF)
{
if (ch>='0' && ch<='9')
{
form (nr);
k++;
c[k]=nr;
}
if (ch=='(')
add('(');
if (ch==')')
{
while (st[l]!='(')
{
scoate (st[l]);
l--;
}
l--;
}
if (ch=='+' || ch=='-')
{
while (st[l]=='+' || st[l]=='-' || st[l]=='*' ||st[l]=='/')
{
scoate (st[l]);
l--;
}
add (ch);
}
if (ch=='*' || ch=='/')
{
while (st[l]=='*' || st[l]=='/')
{
scoate (st[l]);
l--;
}
add (ch);
}
}
while (l>0)
{
scoate (st[l]);
l--;
}
n=k;
l=0;
for (i=1;i<=n;i++)
{
if (c[i]>=0)
{
l++;
s[l]=c[i];
}
else
{
if (c[i]==-1)
{
l--;
s[l]=s[l]+s[l+1];
}
if (c[i]==-2)
{
l--;
s[l]=s[l]-s[l+1];
}
if (c[i]==-3)
{
l--;
s[l]=s[l]*s[l+1];
}
if (c[i]==-4)
{
l--;
s[l]=s[l]/s[l+1];
}
}
}
printf ("%i",s[1]);
return 0;
}