数据结构实验之栈与队列三:后缀式求值
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
Input
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
Output
求该后缀式所对应的算术表达式的值,并输出之。
Sample Input
59*684/-3*+#
Sample Output
57
Hint
基本操作数都是一位正整数!
Source
AC代码
#include <iostream>
#include <bits/stdc++.h>
#define maxn 0x3f3f3f3f
using namespace std;
int main()
{
int i, a, b;
stack<int>q;
char s[1000+10];
cin>>s;
int n = strlen(s);
for(i = 0;i<n;i++)
{
if(s[i]>='0'&&s[i]<='9')
{
q.push(s[i]-'0');
}
else if(s[i]=='+')
{
a = q.top();
q.pop();
b = q.top();
q.pop();
q.push(a+b);
}
else if(s[i]=='-')
{
a = q.top();
q.pop();
b = q.top();
q.pop();
q.push(b-a);
}
else if(s[i]=='*')
{
a = q.top();
q.pop();
b = q.top();
q.pop();
q.push(a*b);
}
else if(s[i]=='/')
{
a = q.top();
q.pop();
b = q.top();
q.pop();
q.push(b/a);
}
else if(s[i]=='%')
{
a = q.top();
q.pop();
b = q.top();
q.pop();
q.push(a%b);
}
}
printf("%d\n",q.top());
return 0;
}