题解 | 计算表达式
计算表达式
https://www.nowcoder.com/practice/7b18aa6b7cc14f8eaae6b8acdebf890b
#include <iostream>
#include <stack>
#include <cstdio>
#include <string>
using namespace std;
double getNumber(int &i, string str){
double number=0;
while(str[i]>='0' && str[i]<='9'){
number = number*10 - '0' + str[i++];
}
return number;
}
int getOrder(char x){
if(x=='#'){
return 1;
}else if(x=='$'){
return 2;
}else if(x=='+' || x=='-'){
return 3;
}else{
return 4;
}
}
double caculate(double x, double y, char op){
if(op=='+'){
return x+y;
}else if(op=='-'){
return x-y;
}else if(op=='*'){
return x*y;
}else{
return x/y;
}
}
int main() {
string str;
while(getline(cin, str)){
int i=0;
stack<double> numbers;
stack<char> operates;
str += "$";
operates.push('#');
while(i<str.size()){
if(str[i]>='0' && str[i]<='9'){
numbers.push(getNumber(i, str));
}else{
if(getOrder(str[i]) > getOrder(operates.top())){
operates.push(str[i++]);
}else{
double y = numbers.top();
numbers.pop();
double x = numbers.top();
numbers.pop();
double temp = caculate(x, y, operates.top());
operates.pop();
numbers.push(temp);
}
}
}
cout << numbers.top() << endl;
}
}

查看13道真题和解析