题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5-2)+73*(5-2)+7 对应的后缀表达式为:3.5.2.-*7.+@3.5.2.-*7.+@。在该式中,@
为表达式的结束符号。.
为操作数的结束符号。
输入格式
输入一行一个字符串 �s,表示后缀表达式。
输出格式
输出一个整数,表示表达式的值。
输入输出样例
输入 #1复制
3.5.2.-*7.+@
输出 #1复制
16
说明/提示
数据保证,1≤∣�∣≤501≤∣s∣≤50,答案和计算过程中的每一个值的绝对值不超过 109109。
#include<iostream>
#include<cstdio>
using namespace std;
long long stk[1000];
int main(){
int i = 0, now = 0;
int stk[1000];
char op;
while((op = getchar()) != '@'){
if(op >= '0' && op <= '9'){
now *= 10;
now += (op - '0');//now用以存储操作数
}
else if(op == '.'){
stk[++i] = now;//stk数组用来模拟栈存储操作数
now = 0;
}
else if(op == '+'){
stk[i - 1] = stk[i - 1] + stk[i];
stk[i--] = 0;//操作符使用后两个数结合为一个,另一个归零。
}
else if(op == '-'){
stk[i - 1] = stk[i - 1] - stk[i];
stk[i--] = 0;
}
else if(op == '*'){
stk[i - 1] = stk[i - 1] * stk[i];
stk[i--] = 0;
}
else if(op == '/'){
stk[i - 1] = stk[i - 1] / stk[i];
stk[i--] = 0;
}
}
cout<<stk[1];//计算到最后肯定是有一个结果
system("pause");
return 0;
}
运用栈的知识。