题解 | 简单计算器
简单计算器
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; }