思路:对数字运算进行模拟,若遇到’ + ‘或’ - ‘,先将相应的数字push入栈(若为’ - ‘则push数字的相反数),若遇到优先级大的’ * ’ 或 ’ / '先将相应数字与栈顶元素进行运算后将结果push进入;最后将栈中所有元素相加。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stack>
using namespace std;
int main()
{
int i,j;
char c;
char s;
double n;
while(scanf("%lf%c",&n,&c)!=EOF)//开头特殊处理:0 +'\n'时结束;
{
if(n==0 && c=='\n')
{
break;
}
stack<double>st;
double ans=0;
while(!st.empty())
{
st.pop();
}
st.push(n);
while(scanf("%c %lf",&s,&n)!=EOF)
{
if(s=='+')
{
st.push(n);
}
if(s=='-')
{
st.push(-n);
}
if(s=='*')
{
double temp=st.top()*n;
st.pop();
st.push(temp);
}
if(s=='/')
{
double temp=st.top()*1.0/n;
st.pop();
st.push(temp);
}
c=getchar();
if(c=='\n')
{
break;
}
}
while(!st.empty())
{
ans+=st.top();
st.pop();
}
printf("%.2lf\n",ans);
}
return 0;
}