简单计算器

简单计算器

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
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;
} 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值