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;
}
愿你出走半生,归来仍是少年

浙公网安备 33010602011771号