Hdu-1237
题目描述
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
输入
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
输出
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
示例输入
1 + 2
4 + 2 * 5 - 7 / 11
0
示例输出
3.00
13.36
#include<stdio.h>
#include<stack>
using namespace std;
int main()
{
double a;
char ch;
while(1)
{
stack<double> s;
scanf("%lf%c",&a,&ch);
if(a==0&&ch=='\n')
{
break;
}
s.push(a);
while(1)
{
scanf("%c %lf",&ch,&a);
if(ch=='+')
{
s.push(a);
}
else if(ch=='-')
{
s.push(-a);
}
else if(ch=='*')
{
double t=s.top()*a;
s.pop();
s.push(t);
}
else
{
double t=s.top()/a;
s.pop();
s.push(t);
}
char k=getchar();
if(k=='\n')
{
break;
}
}
double ans=0;
while(!s.empty())
{
ans+=s.top();
s.pop();
}
printf("%.2lf\n",ans);
}
}