#include<iostream>
#include<sstream>
#include<math.h>
#include<string>
using namespace std;
stringstream ss;//用流存数据,这样使空格为字符串间断点
int flag;//反馈异常错误
//递归实现前缀表达式的值(其意义等价于 堆栈实现)
double f()
{
char c[9];//用于存取单个字符串
if (!(ss >> c)) flag = 1;//每次流出1个字符串,如:abc efg,第一次abc,第二次efg
if (c[1] == '\0') {//此处为只读取到了1个字符,即:可能是运算符,也可能是运算数
double num1, num2;
switch (c[0])
{
case '+':return f() + f(); break;
case '-':return f() - f(); break;
case '*':return f() * f(); break;
case'/':
num1 = f(); num2 = f();
if (fabs(num2 - 0.0) < 0.0000001) {
flag = 1;
return 0.0;
}
else return num1/num2; break;
}
}
return atof(c);//若读取的不是单个字符,则必定是运算数,直接将字符串转浮点数 返回
}
int main()
{
string s;
flag = 0;
getline(cin, s);
ss << s;
double result = f();
if (flag)cout << "ERROR" << endl;
else printf("%.1lf\n", result);
}
求前缀表达式的值
最新推荐文章于 2023-03-26 16:50:16 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)