后缀表达式求值(c++题解)

题目描述

不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行,不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *。这样的表达式称为后缀表达式,也叫逆波兰表达式。它是为了方便在计算机中进行表达式求值而出现的。

给出一个仅由整数 、+、-、*、/等组成的后缀表达式,符号之间用空格分开,计算它的值。/ 表示整除。

输入格式

第1行:1个字符串,即后缀表达式

输出格式

第1行:1个整数,表示运算结果。

样例

样例输入
复制2 1 + 3 *
样例输出
复制9

数据范围与提示

数据保证每个整型数字绝对值不超过100,运算过程中不会超过int,数字总数不超过100个

提示:字符数组转int可以用atoi()函数,需要打开cstdlib头文件

 

_____________________________________________________________________________

日常发作业题解。 

今天这几篇题解写死我啦!

写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

_____________________________________________________________________________

#include 
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<

你可能感兴趣的:(c++,算法,开发语言)