记录一下,当时写的时候还是不知道如何下手,感觉卡了半天,都学过好几次了。
代码如下:
#include<iostream>
#include<cstdio>
#include<queue>
#include<stack>
#include<string.h>
using namespace std;
#define MAX 210
int T;
int main(){
char s[MAX];
int i,j;
double last,now,ans ;
stack<double> numQE;
while(gets(s),strcmp(s,"0"))
{
ans = 0 ;
int len =strlen(s);
char lastOperator=' ';
for(i = 0 ; i <len ; i++)
{
if(s[i]==' ')
continue ;
if(s[i]=='*'||s[i]=='/')
{
last = numQE.top();
numQE.pop();
now =0 ;
for(j = i+2 ; j <len ;j++)
{
if(s[j]!=' ')
now = now*10+(s[j]-'0');
else
break ;
}
if(s[i]=='*')
numQE.push(now*last);
else
numQE.push(last/now);
i = j;
lastOperator=s[i];
}
else if(s[i]=='+'||s[i]=='-')
{
lastOperator=s[i];
}else{
double res =0 ;
for(j = i ; j <len ;j++)
{
if(s[j]!=' ')
res = res*10+(s[j]-'0');
else
break ;
}
if(lastOperator=='-')
numQE.push(-res);
else
numQE.push(res);
i = j;
}
}
while(!numQE.empty())
{
ans+=numQE.top();
numQE.pop();
}
printf("%.2lf\n",ans);
}
}