#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define maxsize 20
typedef struct{
int data[maxsize];
int top;
}stack;
stack p;
typedef struct{
char data[maxsize];
int top;
}Seqstack;
Seqstack s1,s2;
int main(){
char str[maxsize],srt[maxsize];
int i=0,j,m,n;
s1.top=s2.top=-1;
printf("输入以#为结束标志的算式\n");
printf("\n");
scanf("%s",&str);
while(str[i]!='#'){
switch(str[i]){
case'(':
s1.data[++s1.top]=str[i];break;
case')':
while(s1.data[s1.top]!='('){
s2.data[++s2.top]=s1.data[s1.top--];
}
s1.top--;
break;
case'+':
case'-':
while(s1.data[s1.top]!='('&&s1.top>-1){
s2.data[++s2.top]=s1.data[s1.top--];
}
s1.data[++s1.top]=str[i];break;
case'*':
case'/':
if(s1.data[s1.top]=='*'||s1.data[s1.top]=='/'){
s2.data[++s2.top]=s1.data[s1.top--];
}
s1.data[++s1.top]=str[i];
break;
default:
if(str[i]>='0'&&str[i]<='9'){
s2.data[++s2.top]=str[i];
}break;
}
i++;
}
while(s1.top>-1){
s2.data[++s2.top]=s1.data[s1.top--];
}
s1.top=-1;
while(s2.top>-1){
s1.data[++s1.top]=s2.data[s2.top--];
}
p.top=-1;
i=0;
while(s1.top>-1){
switch(s1.data[s1.top]){
case '+':
m=p.data[p.top--];
n=p.data[p.top--];
j=m+n;
p.data[++p.top]=j;
s1.top--;
break;
case '-':
m=p.data[p.top--];
n=p.data[p.top--];
j=n-m;
p.data[++p.top]=j;
s1.top--;
break;
case '*':
m=p.data[p.top--];
n=p.data[p.top--];
j=m*n;
p.data[++p.top]=j;
s1.top--;
break;
case '/':
m=p.data[p.top--];
n=p.data[p.top--];
j=n/m;
p.data[++p.top]=j;
s1.top--;
break;
default:
p.data[++p.top]=(int)s1.data[s1.top]-48;
s1.top--;break;
}
}
printf("运算结果为:%d\n",p.data[p.top]);
return 0;
}