#include<stack>
#include<iostream>
#include<string>
using namespace std;
stack<double>st;
string s;
int i;
void getnumber(){
int j=i;
while(j>=0&&s[j]!=' ')--j;
st.push(stod(s.substr(j+1,i-j)));
i=j;
}
bool f(double a,char c,double b,double &d){
switch(c){
case '+':d=a+b;break;
case '-':d=a-b;break;
case '*':d=a*b;break;
case '/':
if(b==0)return false;
else d=a/b;
}
return true;
}
int main(){
bool fail=false;
getline(cin,s);i=s.size()-1;
while(i>=0){
if(s[i]==' ')--i;
else if(s[i]>='0'&&s[i]<='9')
getnumber();
else{
double a=st.top();st.pop();
double b=st.top();st.pop();
double d;
if(!f(a,s[i--],b,d))
{cout<<"ERROR";fail=true; }
else st.push(d);
}
}
if(!fail)printf("%.1lf",st.top());
return 0;}
前缀式比后缀式的优点是没有符号栈,只有数字栈,从后往前扫描,每个数字入栈,每找到一个符号就计算一次
PAT3-07. 求前缀表达式的值
最新推荐文章于 2024-03-19 16:10:58 发布