前缀表达式

(3+4)x5-6对应的波兰式是-*+3456
从右到左扫描表达式,将数字压入堆栈
遇到运算符时,弹出栈顶的两个数,进行运算
注意顺序为:栈顶元素 -操作符->次顶元素
并将结果入栈;重复上述过程直到表达式最右端
最后运算得出的值即为最终结果

#include
#include
#include
#include
#include
using namespace std;
stack<int> stk;
int main(){
     
	string line;cin>>line;
	reverse(line.begin(),line.end());
	for(const auto& i:line)
		if(isdigit(i))stk.push(i-'0');
		else{
     
			int a=stk.top();stk.pop();
			int b=stk.top();stk.pop();
			switch(i){
     
				case '+':stk.push(a+b);break;
				case '-':stk.push(a-b);break;
				case '*':stk.push(a*b);break;
				case '/':stk.push(a/b);break;
				default:break;
			}
		}
	cout<<stk.top()<<endl;
	return 0;
}

你可能感兴趣的:(前缀表达式)