简单计算器

电玩女神 2022-05-15 05:36 306阅读 0赞

简单计算器

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input
1 + 2
4 + 2 * 5 - 7 / 11
0
Sample Output
3.00
13.36
分析:

  1. **用到栈 这一题 我只用了一个栈 只存数据 另外 注意数字与运算符号之间用空格隔开
  2. **stack(c++)
  3. **头文件 #include <stack>
  4. **基本定义 stack<类型> s
  5. **基本操作
  6. s.push()
  7. s.pop()
  8. s.size()
  9. s.empty()

代码总览:

  1. //简单计算器
  2. #include <cstdio>
  3. #include <iostream>
  4. #include <cstring>
  5. #include <stack>
  6. using namespace std;
  7. int main()
  8. {
  9. char b,c;
  10. double n,ans,t;
  11. while(scanf("%lf%c",&n,&b)!=EOF)//不能写成while(scanf("%lf %c",&n,&b)!=EOF)中间有空格的形式 因为后者的读入就是以空格的形式
  12. {
  13. ans=0;
  14. stack<double> s;
  15. if(n==0&&b=='\n')
  16. break;
  17. s.push(n);
  18. while(scanf("%c%lf",&c,&n)!=EOF)
  19. {
  20. if(c=='+') s.push(n);
  21. else if(c=='-') s.push(-n);
  22. else if(c=='*')
  23. {
  24. t=n*s.top();
  25. s.pop();
  26. s.push(t);
  27. }
  28. else{
  29. t=s.top()/n;
  30. s.pop();
  31. s.push(t);
  32. }
  33. b=getchar();
  34. if(b=='\n')
  35. break;
  36. }
  37. while(!s.empty())
  38. {
  39. ans+=s.top();
  40. s.pop();
  41. }
  42. printf("%.2lf\n",ans);
  43. }
  44. return 0;
  45. }

发表评论

表情:
评论列表 (有 0 条评论,306人围观)

还没有评论,来说两句吧...

相关阅读

    相关 简单计算器

    简单计算器 读入一个只包含 +, -, \, / 的非负整数计算表达式,计算该表达式的值。 Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过2

    相关 简单计算器

     突然想到学了这么长时间C语言,除了写题,似乎没干过别的事了。。。![奋斗][struggle.gif]  闲着写了一个计算器,纯手工模拟,虽然只能实现简单的加减乘除和取余。

    相关 简单计算器

    简单计算器 功能 模拟简单计算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。 知识点 1.