HDU 1237 简单计算器
高一时打过,做了整整一个晚上,现在看到计算器的题目就头疼,从网上找了一个,修修改改了一下……
#include <iostream> #include <stack> #include <cstring> using namespace std; char Precede(char a,char b){ if(a=='+'||a=='-'){ switch(b){ case '+': case '-':return '>';break; case '*': case '/':return '<';break; } } if(a=='*'||a=='/') return '>'; } double operate(double a,char c,double b){ switch(c){ case '+':return (a+b);break; case '-':return (a-b);break; case '*':return a*b;break; case '/':return a/b;break; } } int main(){ stack opnd; stack optr; string s; char theta,c; int i,k; double a,b; while(getline(cin,s),s!="0"){ opnd.push(s[0]-48); i=0; c=s[++i]; while(c!='\0'){ if(c==' '){c=s[++i];continue;} if(c>='0'&&c<='9'){ if(s[i-1]>='0'&&s[i-1]<='9'){ a=opnd.top()*10+c-48; opnd.pop(); opnd.push(a); } else opnd.push(c-48); c=s[++i]; } else{ if(optr.empty()!=true){ switch(Precede(optr.top(),c)){ case '<':optr.push(c);c=s[++i];break; case '>':theta=optr.top(); optr.pop(); a=opnd.top(); opnd.pop(); b=opnd.top(); opnd.pop(); opnd.push(operate(b,theta,a)); break; } } else optr.push(c),c=s[++i]; } } while(optr.empty()!=true){ theta=optr.top(); optr.pop(); a=opnd.top(); opnd.pop(); b=opnd.top(); opnd.pop(); opnd.push(operate(b,theta,a)); } printf("%.2lf\n",opnd.top()); } return 0; }
愿你出走半生,归来仍是少年