输入n个元素(数或运算符)代表前缀表达式,计算它的结果。
输入:两行,第一行输入n,第二行输入n个元素,每个元素之间用一个空格隔开。
输出:一行,该前缀表达式的结果。
【输入样例】:
3
* 2 3
【输出样例】:
6
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;//元素数量
cin>>n;
string q[51];//因为每个数(或运算符)之间都有空格,所以用字符串数组存储。
stack<int>s;//创建栈
for(int i=0;i<n;i++){
cin>>q[i];
}
for(int i=n-1;i>=0;i--){//倒序遍历(如后缀表达式)
string x=q[i];//用x存储当前字符串
if(x[0]>='0'&&x[0]<='9'){//因为x要么是数字,要么是符号,x[0]是数字则x是数字
int k=0;
for(int i=0;i<x.length();i++){//遍历它的所有位并求值
k=k*10+x[i]-48;//把前几位乘10并加上当前位(如遍历12,1(前几位)*10+2(当前位)=12)
}s.push(k);//把结果入栈
}else{
int s1,s2;
s1=s.top();
s.pop();
s2=s.top();
s.pop();//取栈顶和栈顶下面的数(要运算的)
if(x=="+"){
s.push(s2+s1);//因为是倒序存储,所以栈顶元素其实是要运算的第二个数。
}
if(x=="-"){
s.push(s2-s1);
}
if(x=="*"){
s.push(s2*s1);
}
if(x=="/"){
s.push(s2/s1);
}
}}
cout<<s.top();//输出结果(栈顶唯一的值)
return 0;
}