题目
Problem Description
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input
1 + 2
4 + 2 * 5 - 7 / 11
0
Sample Output
3.00
13.36
题目可能没有什么好介绍的,只是有一些小坑以及处理运算和输入的方式
直接上代码把
AC代码
#include<cstdio>
#include<stack>
using namespace std;
int main()
{
double ans,c;
double a,y;
char b,x;
stack<double> s;
while(1)
{
ans=0;
c=0;
scanf("%lf%c",&a,&b);
if(a==0&&b=='\n')
break;
s.push(a);
while(1)
{
if(c==0)
c=1;
else
b=getchar();//注意--------这里必须是b
if(b=='\n')
break;
scanf("%c %lf",&x,&y);
if(x=='*')
{
double i=s.top()*y;
s.pop();
s.push(i);
}
else if(x=='/')
{
double i=s.top()/y;
s.pop();
s.push(i);
}
else if(x=='+')
s.push(y);
else if(x=='-')
s.push(-y);
}
while(!s.empty())
{
ans+=s.top();
s.pop();
}
printf("%.2f\n",ans);
while(!s.empty())
s.pop();
}
return 0;
}