题解 | 简单计算器
简单计算器
https://www.nowcoder.com/practice/5759c29a28cb4361bc3605979d5a6130
#include <iostream>
#include <stack>
#include <string>
#include <cstdio>
using namespace std;
double getNumber(int &i, string str){
double number = 0;
while(str[i]>='0' && str[i]<='9'){
number = number*10 + str[i++] - '0';
}
return number;
}
int getOrder(char str){
if(str == '#'){
return 1;
}else if(str == '$'){
return 2;
}else if(str == '+' || str == '-'){
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)){
if(str == "0"){
break;
}
stack<double> number;
stack<char> operate;
str += "$";
operate.push('#');
int i=0;
while(i<str.size()){
// 跳过空格
if(str[i] == ' '){
i++;
}else if(str[i] >='0' && str[i]<='9'){
number.push(getNumber(i, str));
}else{
// 操作符处理
if(getOrder(str[i]) > getOrder(operate.top())){
operate.push(str[i++]);
}else{
double y = number.top();
number.pop();
double x = number.top();
number.pop();
double temp = caculate(x,y,operate.top());
number.push(temp);
operate.pop();
}
}
}
printf("%.2lf\n", number.top());
}
return 0;
}

查看1道真题和解析