#include <stdio.h>
#include <stdlib.h>
typedef struct
{int *base;
int *top;
int stacksize;
}sqstack1;
typedef struct
{char *base;
char *top;
char stacksize;
}sqstack2;
sqstack1 Initstack1(sqstack1 s)
{s.base=(int *)malloc(10*sizeof(int));
s.top=s.base;
s.stacksize=10;
return(s);
}
sqstack2 Initstack2(sqstack2 s)
{
s.base=(char *)malloc(10);
s.top=s.base;
s.stacksize=10;
return(s);
}
void push2(sqstack2 s,char e)
{*s.top++=e;}
void push1(sqstack1 s,char e)
{int i;
i=e-48;
*s.top++=i;
}
char pop2(sqstack2 s,char e)
{if(s.top==s.base) return 0;
e=*--s.top;
return (e);
}
int pop1(sqstack1 s,int e)
{if(s.top==s.base) return 0;
e=*--s.top;
return (e);
}
int gettop1(sqstack1 s,int e)
{e=*(s.top-1);
return (e);
}
char gettop2(sqstack2 s,char e)
{e=*(s.top-1);
return (e);
}
int In(char c)
{if(c>='0'&&c<='9') return (1);
else return (0);
}
char precede(char optr,char c)
{char stack[6]={'#','(','+','-','*','/'};
char input[7]={'#',')','+','-','*','/','('};
int p=0,q=0;
while(stack[p]!=optr)
p++;
while(input[q]!=c)
q++;
if(p/2<q/2) return('<');
if(p/2>=q/2)
{if(p==2) return('=');
else return('>');
}
}
int operate(int a,char theta,int b)
{if(theta=='+') return(a+b);
if(theta=='-') return(a-b);
if(theta=='*') return(a*b);
if(theta=='/') return(a/b);
}
void main(void)
{sqstack1 opnd;
sqstack2 optr;
char c,theta,x;
int a,b,e;
optr=Initstack2(optr);
push2(optr,'#');
opnd=Initstack1(opnd);
c=getchar();
while(c!='#'||gettop2(optr,e)!='#')
{if(In(c)) {push1(opnd,c);c=getchar();}
else
switch(precede(gettop2(optr,e),c))
{case '<':
push2(optr,c);
c=getchar();
break;
case'=':
pop2(optr,x);
c=getchar();
break;
case'>':
theta=pop2(optr,theta);
b=pop1(opnd,b);
a=pop1(opnd,a);
x=operate(a,theta,b)+48;
push1(opnd,x);
break;
}
}
printf("%d",gettop1(opnd,e));
getch();
}