#include <iostream> #include <stack> using namespace std; long long tmp1,tmp2,tmp3; int main() { stack<long long>a; char ch; cin>>ch; while(ch!='@'){//到@停止 if(ch>='0'&&ch<='9'){//当输入数字字符时 tmp1=ch-'0'; cin>>ch; while(ch>='0'&&ch<='9'){//用tmp1记录该数字 tmp1*=10; tmp1+=ch-'0'; cin>>ch; } a.push(tmp1);//进栈 } if(ch=='+'){ tmp2=0; tmp2+=a.top(); a.pop(); tmp2+=a.top(); a.pop(); a.push(tmp2); } else if(ch=='-'){ tmp2=0; tmp2-=a.top(); a.pop(); tmp2+=a.top(); a.pop(); a.push(tmp2); } else if(ch=='*'){ tmp2=0; tmp2+=a.top(); a.pop(); tmp2*=a.top(); a.pop(); a.push(tmp2); } else if(ch=='/'){ tmp2=0; tmp3=a.top(); a.pop(); tmp2+=a.top(); a.pop(); a.push(tmp2/tmp3); } cin>>ch; } cout<<a.top(); return 0; }
题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5-2)+73*(5-2)+7 对应的后缀表达式为:3.5.2.-*7.+@3.5.2.-*7.+@。在该式中,@
为表达式的结束符号。.
为操作数的结束符号。
输入格式
输入一行一个字符串 ss,表示后缀表达式。
输出格式
输出一个整数,表示表达式的值。
输入输出样例
输入 #13.5.2.-*7.+@输出 #1
16
说明/提示
数据保证,1≤∣s∣≤501≤∣s∣≤50,答案和计算过程中的每一个值的绝对值不超过 109109。
很经典的栈的应用
标签:ch,后缀,top,pop,w3,push,表达式,tmp2 From: https://www.cnblogs.com/lijunjie03/p/17334676.html