洛谷-P1449 后缀表达式
重操旧业~
本菜鸡看到题就只会想到数组,但后来发现不可行,出去俩元素,还得进来一个元素,不好调o(╥﹏╥)o
emm...但还是有所收获的,'2'转2,利用'2'-'0',而不是直接强制int转换哦
同时也发现被题中举的例子迷惑了,数字可不一定是个位数!
1、此题采用栈和二叉树的后序遍历思想(左右根)
2、运用到栈的相关函数
stack<> ss //定义栈 ss.pop() //移除栈顶元素 ss.top() //取栈顶元素 ss.push() //入栈
3.利用该图来理解~

代码见下
#include<bits/stdc++.h>
//省略 std:: 前缀
using namespace std;
int main(){
stack<int> res;
int left,right;
char c;
cin>>c;
while(c!='@'){
if(c>='0'&&c<='9'){
left=0;
// 数字不一定是个位数,例123,所以需利用循环输入该数字
while(c>='0'&&c<='9'){
left=left*10+(c-'0');
cin>>c;
}}
// 将.前面的数字放入栈中
if(c=='.'){
res.push(left);
}
else{
// top取栈顶元素,pop移除栈顶元素
//采用后序遍历(左右根),所以右节点在栈顶
right=res.top();
res.pop();
left=res.top();
res.pop();
if(c=='+') res.push(left+right);
if(c=='-') res.push(left-right);
if(c=='*') res.push(left*right);
if(c=='/') res.push(left/right);
}
// 输入下一个字符
cin>>c;
}
cout<<res.top();
return 0;
}
最后希望zj能坚持写下去(╹▽╹)

浙公网安备 33010602011771号