题解:这是一道栈的裸题,依次压栈出栈即可,细节处理在于可能是多位数,所以要进行一个字符串到十进制的转换计算
#include<cstdio>
#include<stack>
#include<string>
#include<iostream>
using namespace std;
stack<int>tk;
string s;
void cz_tk(char c){//计算
int a, b;
b=tk.top();//取出栈顶元素
tk.pop();
a=tk.top();//去除栈顶第二个数
tk.pop();
switch(c){//选择符号计算
case '+':{
tk.push(a+b);
break;
}
case '-':{
tk.push(a-b);
break;
}
case '*':{
tk.push(a*b);
break;
}
case '/':{
tk.push(a/b);
break;
}
}
}
int main(){
cin>>s;
int count=0;
for(int i=0;s[i]!='@';i++){
if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'){
cz_tk(s[i]);
}else if(s[i]=='.'){
tk.push(count);
count=0;
}else{
count=(s[i]-'0')+count*10;//注意这里不是+=
}
}
cout<<tk.top()<<endl;
return 0;
}