题目链接:传送门(点我)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
/*
思路:读到运算符就把栈顶上两个数做运算,然后弹出栈顶两个元素 再将结果压入栈顶
*/
char op[4]={'+','-','*','/'};
string in;
stack<int>s;
ll m,n,now;
int find(char o)
{
for(int i=0;i<4;i++)
if(o==op[i])return 1;
return 0;
}
ll calc(ll x,ll y,char o)//x为栈顶数,y为次顶数
{
switch(o){
case '+':return x+y;
case '-':return y-x;
case '*':return x*y;
case '/':return y/x;
}
}
int main()
{
cin>>in;
for(int i=0;i<in.length();i++){
if(in[i]>='0'&&in[i]<='9'){//读入数字
now*=10;now+=in[i]-'0';
}
else if(in[i]=='.')s.push(now),now=0;
if(find(in[i])){
m=s.top();s.pop();
n=s.top();s.pop();
s.push(calc(m,n,in[i]));
}
}
cout<<s.top()<<endl;
return 0;
}