#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char stack[500];
int queue[500];
void calcu(int r,int top)
{
switch (stack[top]){
case '+':queue[r-1]=queue[r]+queue[r-1];break;
case '-':queue[r-1]=queue[r-1]-queue[r];break;
case '*':queue[r-1]=queue[r]*queue[r-1];break;
case '/':queue[r-1]=queue[r-1]/queue[r];break;
case '%':queue[r-1]=queue[r-1]%queue[r];break;
}
}
int main()
{
char s[500];
int pr[300]={0};
pr[(int)'+']=pr[(int)'-']=1;
pr[(int)'*']=pr[(int)'/']=pr[(int)'%']=2;
pr[(int)'(']=0;
gets(s);
int top=0,r=0,i=0;
while (s[i]!='=')
{
if (s[i]>='0'&&s[i]<='9')
{
int x=(int)s[i]-48;
i++;
while (s[i]>='0'&&s[i]<='9')
{
x=x*10+(int)s[i]-48;
i++;
}
queue[++r]=x;
i--;
}
else if (s[i]!='('&&s[i]!=')'&&s[i]!=' '){
if (top==0) stack[++top]=s[i];
else {
if (pr[(int)s[i]]>pr[(int)stack[top]]) stack[++top]=s[i];
else {
while (top!=0&&pr[(int)s[i]]<=pr[(int)stack[top]]) calcu(r--,top--);
stack[++top]=s[i];
}
}
}
else if (s[i]=='(') stack[++top]=s[i];
else if (s[i]==')') {
while (stack[top]!='(') calcu(r--,top--);
top--;
}
i++;
}
for (int i=top;i>=1;i--) calcu(r--,top--);
printf("%d",queue[1]);
return 0;
}
</codedoc>