#include
#include
int main(void){
char ch,stro[1001],stack[1001];
int numstack[1001];
int top=-1,head=-1;
/*************************************************/
/*将中缀表达式转化为后缀表达式*/
while((ch=getchar())!=EOF){
if(ch==' ') continue;
else if(ch<='9'&&ch>='0')
stro[++head]=ch;
else if(ch=='+'||ch=='-'){
if(top==-1)
stack[++top]=ch;
else{
while(true){
if(stack[top]=='+'||stack[top]=='-'){
stro[++head]=stack[top];
top--;
}else{
stack[++top]=ch;
break;
}
}
}
}else if(ch=='('){
stack[++top]=ch;
}else if(ch==')'){
while(true){
if(stack[top]!='('){
stro[++head]=stack[top];
top--;
}else{
top--;
break;
}
}
}
}
while(top>=0){
stro\[++head\]=stack\[top\];
top--;
}
stro\[++head\]='\\0';
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
/\*转化结束\*/
/\*开始计算\*/
top=-1;
for(int i=0;stro\[i\]!='\\0';i++){
if(stro\[i\]<='9'&&stro\[i\]>='0')
numstack\[++top\]=stro\[i\]-'0';
else if(stro\[i\]=='+'){
numstack\[top-1\]+=numstack\[top\];
top--;
}else if(stro\[i\]=='-'){
numstack\[top-1\]-=numstack\[top\];
top--;
}
}
printf("%d",numstack\[0\]);
return 0;
}
逆波兰
手机扫一扫
移动阅读更方便
你可能感兴趣的文章