输入一个逆波兰式 ,又称后缀表达式(将运算符写在操作数之后)计算出它的值。保证数据合法,不会出现除0的情况,输入的数字都是整数 输入 一个逆波兰式 输出 值 计算结果保留2位小数 样例输入复制 1 2 + 3 4 + * 样例输出复制 21.00,请你用c++帮我完成这个代码
时间: 2024-03-03 12:49:01 浏览: 51
好的,请查看以下代码,实现了逆波兰式的求值:
```c++
#include <iostream>
#include <stack>
#include <string>
#include <iomanip>
using namespace std;
double compute(double a, double b, char op) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
default: return 0;
}
}
double evaluate(string expr) {
stack<double> s;
for (int i = 0; i < expr.length(); i++) {
if (isdigit(expr[i])) {
double num = 0;
while (isdigit(expr[i])) {
num = num * 10 + (expr[i] - '0');
i++;
}
s.push(num);
} else if (expr[i] == '+' || expr[i] == '-' || expr[i] == '*' || expr[i] == '/') {
double b = s.top();
s.pop();
double a = s.top();
s.pop();
double c = compute(a, b, expr[i]);
s.push(c);
}
}
return s.top();
}
int main() {
string expr;
getline(cin, expr);
double result = evaluate(expr);
cout << fixed << setprecision(2) << result << endl;
return 0;
}
```
输入的逆波兰式可以使用 `getline` 函数来获取。首先遍历逆波兰式的每个字符,如果是数字则将其加入栈中,如果是运算符则从栈中弹出两个数进行计算,并将计算结果入栈,最后计算完成后栈中只剩下一个数,即为逆波兰式的值。最后输出结果时,需要使用 `fixed` 和 `setprecision` 函数来控制小数位数。