//1、将操作符压入操作数栈
//2、将运算符压入运算符栈
//3、忽略左括号
//4、遇到右括号时,弹出一个运算符,弹出所需要数量的操作数,并将操作符和操作数的运算结果压入操作数栈
#include<iostream>
#include<stack>
#include<string>
#include<cmath>
#include<sstream>
using namespace std;
void fun() {
string s;
stack<string>ops;
stack<double>vals;
while (true) {
cin >> s;
if (s == "(") continue;
else if (s == "+") ops.push(s);
else if (s == "-") ops.push(s);
else if (s == "*") ops.push(s);
else if (s == "/") ops.push(s);
else if (s == "sqrt") ops.push(s);
else if (s == ")") {
double val = vals.top();
vals.pop();
string op = ops.top();
ops.pop();
if (op == "+")
val = vals.top()+val, vals.pop(),vals.push(val);
else if (op == "-")
val = vals.top()-val, vals.pop(), vals.push(val);
else if (op == "*")
val = vals.top()*val, vals.pop(), vals.push(val);
else if (op == "/")
val = vals.top()/val, vals.pop(), vals.push(val);
else
val = sqrt(val), vals.push(val);
}
else if(s != "END"){
stringstream ss;
double val;
ss << s;
ss >> val;
vals.push(val);
}
if (s == "END") {
break;
}
}
cout << vals.top() << endl;
}
int main() {
int t;
cin >> t;
while (t--)
fun();
}
【算法第四版读书笔记】Dijkstra双栈算术表达式求值算法
最新推荐文章于 2021-12-28 17:12:53 发布