【栈/中缀转后缀】HDU1237简单计算器

来源:互联网 发布:软件机器人 编辑:程序博客网 时间:2024/05/16 10:16

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237

#include<bits/stdc++.h>using namespace std;int Priority(char op){if(op=='#') return 0;if (op=='+' || op=='-') return 1;    if (op=='*' || op=='/') return 2;    else return -1;}double Operate(double x,double y,char op){    if (op=='+') return x+y;    if (op=='-') return x-y;    if (op=='*') return x*y;    if (op=='/') return x/y;    else return -1;}void cal(string s){double num=0;stack<double>numSt;//数字栈;stack<char>charSt;//符号栈;for(int i=0;i<s.size();i++){if(s[i]==' ') continue;if(isdigit(s[i])){num=0;while(isdigit(s[i])||s[i]=='.'){num=num*10+s[i]-'0';i++;}numSt.push(num);}else{while(!charSt.empty()&&Priority(charSt.top())>=Priority(s[i])){double y=numSt.top();numSt.pop();double x=numSt.top();numSt.pop();char op=charSt.top();charSt.pop();numSt.push(Operate(x,y,op));}charSt.push(s[i]);}}while(!charSt.empty()){double y=numSt.top();numSt.pop();double x=numSt.top();numSt.pop();char op=charSt.top();charSt.pop();numSt.push(Operate(x,y,op));}printf("%.2lf\n",numSt.top());return;}int main(){string s;while(getline(cin,s)&&(s[0]!='0'||s.size()!=1)){cal(s);}return 0;}


原创粉丝点击