简单计算器
简单计算器
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input
1 + 2
4 + 2 * 5 - 7 / 11
0
Sample Output
3.00
13.36
分析:
**用到栈 这一题 我只用了一个栈 只存数据 另外 注意数字与运算符号之间用空格隔开
**stack(c++)
**头文件 #include <stack>
**基本定义 stack<类型> s
**基本操作
s.push()
s.pop()
s.size()
s.empty()
代码总览:
//简单计算器
#include <cstdio>
#include <iostream>
#include <cstring>
#include <stack>
using namespace std;
int main()
{
char b,c;
double n,ans,t;
while(scanf("%lf%c",&n,&b)!=EOF)//不能写成while(scanf("%lf %c",&n,&b)!=EOF)中间有空格的形式 因为后者的读入就是以空格的形式
{
ans=0;
stack<double> s;
if(n==0&&b=='\n')
break;
s.push(n);
while(scanf("%c%lf",&c,&n)!=EOF)
{
if(c=='+') s.push(n);
else if(c=='-') s.push(-n);
else if(c=='*')
{
t=n*s.top();
s.pop();
s.push(t);
}
else{
t=s.top()/n;
s.pop();
s.push(t);
}
b=getchar();
if(b=='\n')
break;
}
while(!s.empty())
{
ans+=s.top();
s.pop();
}
printf("%.2lf\n",ans);
}
return 0;
}
还没有评论,来说两句吧...