题解 | #简单计算器#
简单计算器
https://www.nowcoder.com/practice/5759c29a28cb4361bc3605979d5a6130
#include<iostream> #include<cstdio> #include<map> #include<stack> #include<string> using namespace std; map<char,int> prio={ {'$',0},{'+',1},{'-',1},{'*',2},{'/',2} }; int main(){ char arr[200]; while(fgets(arr,200,stdin)!=NULL){ string line=arr; line.pop_back(); if(line=="0"){ break; } line.push_back('$'); string str; stack<double> num; stack<char> oper; for(int i=0;i<line.size();i++){ if('0'<=line[i]&&line[i]<='9'){ str.push_back(line[i]); } else if(line[i]==' '){ if(str!=""){ num.push(stod(str)); str=""; } }else{ if(line[i]=='$'){ if (str!=""){ num.push(stod(str)); str=""; } } while(!oper.empty()&&prio[line[i]]<=prio[oper.top()]){ char operate=oper.top(); oper.pop(); double rhs=num.top(); num.pop(); double lhs=num.top(); num.pop(); switch(operate){ case'+': num.push(rhs+lhs); break; case'-': num.push(lhs-rhs); break; case'*': num.push(rhs*lhs); break; case'/': num.push(lhs/rhs); break; } } oper.push(line[i]); } }printf("%.2lf",num.top()); } return 0; }