http://tjuacm.chaosheng.top/problem.php?id=1253
#include <iostream>
#include <cstdio>
#include <cstring>
#include <unordered_map>
#include <stack>
using namespace std;
string expr;
stack<double> num;
stack<char> op;
bool isNumber(char a){
return (a != '+' && a != '-' && a != '*' && a != '/');
}
void eval(){
double x = num.top();
num.pop();
double y = num.top();
num.pop();
char c = op.top();
op.pop();
double ans;
if(c == '+') ans = x + y;
else if(c == '-') ans = y - x;
else if(c == '*') ans = x * y;
else if(c == '/') ans = y / (x * 1.0);
num.push(ans);
}
int main(){
unordered_map<char, int> pr{{'+', 1}, {'-', 1}, {'*', 2}, {'/', 2}};
int t;
cin >> t;
while(t--){
cin >> expr;
int n = expr.size();
for(int i = 0; i < n; i++){
if(isdigit(expr[i])){
double tmp = 0, j = i;
while(j < n && isdigit(expr[j])){
tmp = tmp * 10 + expr[j++] - '0';
}
num.push(tmp);
i = j - 1;
}else{
while (op.size() && pr[op.top()] >= pr[expr[i]]) eval();
op.push(expr[i]);
}
}
while(!op.empty()){
eval();
}
cout << num.top() << endl;
}
return 0;
}
京公网安备 11010502036488号