不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行,不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *。这样的表达式称为后缀表达式,也叫逆波兰表达式。它是为了方便在计算机中进行表达式求值而出现的。
给出一个仅由整数 、+、-、*、/等组成的后缀表达式,符号之间用空格分开,计算它的值。/ 表示整除。
第1行:1个字符串,即后缀表达式
第1行:1个整数,表示运算结果。
复制2 1 + 3 *
复制9
数据保证每个整型数字绝对值不超过100,运算过程中不会超过int,数字总数不超过100个
提示:字符数组转int可以用atoi()函数,需要打开cstdlib头文件
?
_____________________________________________________________________________
日常发作业题解。?
今天这几篇题解写死我啦!
写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!?
_____________________________________________________________________________
#include <bits/stdc++.h>
using namespace std;
int n,idx=0;
char x[100005];
int stk[100005];
void push(int x){
stk[idx++]=x;
}
int top(){
return stk[idx-1];
}
void pop(){
idx--;
if(idx<0)idx=0;
}
bool empty(){
return idx==0;
}
int main(){
while(scanf("%s",x)!=EOF){
if(idx==1||idx==0){
int y=atoi(x);
push(y);
continue;
}
int a=top();
pop();
int b=top();
pop();
if(x[0]=='+'){
push(a+b);
}else if(x[0]=='-'&&strlen(x)==1){
push(b-a);
}else if(x[0]=='*'){
push(a*b);
}else if(x[0]=='/'){
push(b/a);
}else{
int y=atoi(x);
push(b),push(a),push(y);
}
}
cout<<top();
}