3-8 求前缀表达式的值 (20分)
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如
2+3*(7-4)+8/4
的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4
。请设计程序计算前缀表达式的结果值。
输入格式:
输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、/以及运算数,不同对象(运算数、运算符号)之间以空格分隔。
输出格式:
输出前缀表达式的运算结果,保留小数点后1位,或错误信息ERROR
。
输入样例:
+ + 2 * 3 - 7 4 / 8 4
输出样例:
13.0
Code:
参考链接
#include<bits/stdc++.h>
using namespace std;
stringstream ss;
int flag = 1;
double f(){
string op="";
if(!(ss>>op)) flag = 0;
if(op.size()==1){
double num1,num2;
if(op=="+") return f() + f();
else if(op=="-") return f() - f();
else if(op=="*") return f() * f();
else if(op=="/"){
num1 = f();num2 = f();
if(fabs(num2)<1e-6){
flag = 0;
return 0.0;
}else return num1 / num2;
}
}
return atof(op.c_str());
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
string str = "";
getline(cin,str);
ss << str;
double ans = f();
if(flag) cout << setiosflags(ios::fixed)<< setprecision(1) << ans;
else cout << "ERROR";
return 0;
}