重操旧业~
本菜鸡看到题就只会想到数组,但后来发现不可行,出去俩元素,还得进来一个元素,不好调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 left,right;
char c;
cin>>c;
while(c!='@'){
if(c>='0'&&c<='9'){left=0;
// 数字不一定是个位数,例123,所以需利用循环输入该数字
while(c>='0'&&c<='9'){
left=left10+(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;
}`