#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
double cal(double a,char b,double c)
{
switch (b)
{
case '+': {
return a + c;
}
case '-': {
return c - a;//先读入的是被减数
}
case '*': {
return a * c;
}
case '/': {
return c / a;
}
}
}
string exper[1000]; int m = 0;
double solve()//共有(还剩)m个字符(需要处理)
{
int i = m;
if (exper[i][0] >= '0' && exper[i][0] <= '9')
{//数字,取出来,指针后移
m++;
return atof(exper[i].c_str());
}
m++;//运算符,指向下一位
return cal(solve(), exper[i][0], solve());//注意这里是i,不是m,因为m是全局,已经改变了,保证可访问到后面的内容
}
int main()
{
double result; int i = 0;
freopen("10.in", "r", stdin);
while (cin >> exper[i++]) {
}
result = solve();
printf("%lf",result);
return 0;
}
递归 波兰(前缀)表达式
最新推荐文章于 2022-05-15 15:51:57 发布