简单计算器
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 17988 Accepted Submission(s): 6330
Problem Description
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input
1 + 2 4 + 2 * 5 - 7 / 11 0
Sample Output
3.00 13.36
#include<cstdio>
#include<stack>
#include<algorithm>
using namespace std;
int main()
{
double t;
double ans;
while(~scanf("%lf",&t)) //不可以&&n,否则0+0不会运算
{
stack<double > sk;
sk.push(t);
while(getchar()!='\n')
{
char c;
scanf("%c %lf",&c,&t);
if(c=='+')
sk.push(t);
else if(c=='-')
sk.push(-t); //c是+或-,t推入栈
else if(c=='*')
{
ans=t*sk.top(); //c是* (/)和上一个数也就是top相乘 (相除)
sk.pop(); //top弹出,换成乘积 推入
sk.push(ans);
}
else
{
ans=sk.top()/t;
sk.pop();
sk.push(ans);
}
}
if(sk.top()==0&&sk.size()==1) //栈顶是0,且只有他一个退出
break;
ans=0;
while(!sk.empty())
{
ans+=sk.top(); //从前到后依次相加,知道为空
sk.pop();
}
printf("%.2lf\n",ans);
}
return 0;
}