题目:
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 

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

  1. 1 + 2
  2. 4 + 2 * 5 - 7 / 11
  3. 0

Sample Output

  1. 3.00
  2. 13.36
  3.  
  4. 解题思路:
    虽然用数组也可以解决这一类题,但在这里我使用栈来解答这一题。
    显然这是一个模拟题。首先把数字和符号分别放入栈中;
    计算部分首先计算乘除法,并把计算的结果放入栈内,如果遇到加减号则把数字和符号分别放入另一个栈中
    此时另一个栈中就只有加减法,再计算加减法,得到计算结果。(注意计算顺序)
  1. #include <iostream>
  2. #include<stack>
  3. #include<queue>
  4. #include<cstring>
  5. #include<cstdio>
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10. int i,j,h,g=,d,b,q;
  11. double ans,x1,x2,k;
  12. char a[];
  13. while ()
  14. {
  15. memset(a,,sizeof(a));
  16. k=;h=;ans=;d=,b=;g=;
  17. gets(a);
  18. if (strlen(a)==&&a[]=='')break;
  19. stack<char>f,f2;
  20. stack<double>s,s2;
  21. queue<char>f1;
  22. queue<double>s1;
  23. for (i=;i<strlen(a);i++)
  24. {
  25. if (a[i]==' '){h++;continue;} //分离数字和符号
  26. else
  27. {
  28. if (h%!=){f.push(a[i]);s.push(k);k=;d++;continue;}
  29. if (h%==){k=k*+(a[i]-'');}
  30. }
  31. }
  32. s2.push(k);
  33. q=d;
  34. while (q--) //导入另一个栈内使计算顺序正确(栈是后进先出)
  35. {
  36. s2.push(s.top());s.pop();
  37. f2.push(f.top());f.pop();
  38. }
  39. while (d--)
  40. {
  41. g=;
  42. if (f2.top()=='+'||f2.top()=='-') //把加减法放入另一个队列
  43. {
  44. f1.push(f2.top());
  45. s1.push(s2.top());
  46. f2.pop();
  47. s2.pop();
  48. b++;continue;
  49. }
  50. if (f2.top()=='*') //计算乘除法
  51. {
  52. x1=s2.top();s2.pop();
  53. x2=s2.top();s2.pop();
  54. s2.push(x1*x2);
  55. f2.pop();continue;
  56. }
  57. if (f2.top()=='/')
  58. {
  59. x1=s2.top();s2.pop();
  60. x2=s2.top();s2.pop();
  61. s2.push(x1/x2);
  62. f2.pop();continue;
  63. }
  64. }
  65. s1.push(s2.top());
  66. ans+=s1.front();s1.pop();
  67. while (b--)
  68. {
  69. if (f1.front()=='+') //计算加减法
  70. {
  71. ans+=s1.front();
  72. s1.pop();
  73. f1.pop();continue;
  74. }
  75. if (f1.front()=='-')
  76. {
  77. ans-=s1.front();
  78. s1.pop();
  79. f1.pop();continue;
  80. }
  81. }
  82. if (g==)printf("%0.2lf\n",ans); //g==1用来控制格式(可以去掉)
  83. }
  84. return ;
  85. }
  1.  

C——简单计算器(HDU1237)的更多相关文章

  1. 简单计算器--hdu1237(栈的运用)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237  这是单纯的本题答案: #include<stdio.h> #define N 11 ...

  2. hdu1237 简单计算器[STL 栈]

    目录 题目地址 题干 代码和解释 参考 题目地址 hdu1237 题干 代码和解释 解本题时使用了STL 栈,要记得使用#include<stack>. 解本题时使用了isdigit()函 ...

  3. HDU1237 简单计算器 2016-07-24 13:34 193人阅读 评论(0) 收藏

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

  4. HDU1237 简单计算器 【栈】+【逆波兰式】

    简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  5. 1.C#WinForm基础制作简单计算器

    利用c#语言编写简单计算器: 核心知识点: MessageBox.Show(Convert.ToString(comboBox1.SelectedIndex));//下拉序号 MessageBox.S ...

  6. 菜鸟学Android编程——简单计算器《一》

    菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少 ...

  7. PAT 06-1 简单计算器

    想看一般简单计算器实现的看客不好意思了,这不是你想要点东西,此处题设为“只能进行加减乘除”.“都是整数”.”优先级相同“和"从左到右".此题来自PAT(http://www.pat ...

  8. php大力力 [005节] php大力力简单计算器001

    2015-08-22 php大力力005. php大力力简单计算器001: 上网看视频,看了半天,敲击代码,如下: <html> <head> <title>简单计 ...

  9. PHP实现简单计算器

    <!--简单的计算器--> <!DOCTYPE html> <html> <head> <title>PHP实现简单计算器</titl ...

  10. c#部分---网吧充值系统;简易的闹钟;出租车计费;简单计算器;对战游戏;等额本金法计算贷款还款利息等;随机生成10个不重复的50以内的整数;推箱子;

    网吧充值系统namespace ConsoleApplication1 { class Program { struct huiyuan { public string name; public st ...

随机推荐

  1. 第一个javaWeb项目-注册界面

    基本功能: 实现信息录入到数据库和信息规范检查 题目要求: 项目目录: 网页界面: 程序源码: package Dao; import java.sql.Connection; import java ...

  2. SpringMvc简单使用

    SpringMvc框架的简单使用 第一步:导入依赖 <dependencies> <dependency> <groupId>org.springframework ...

  3. 嵩天老师python网课爬虫实例1的问题和解决方法

    一,AttributeError: 'NoneType' object has no attribute 'children', 网页'tbody'没有子类 很明显,报错的意思是说tbody下面没有c ...

  4. 高精度算法(C/C++)

    高精度算法 (C/C++) 做ACM题的时候,经常遇到大数的加减乘除,乘幂,阶乘的计算,这时给定的数据类型往往不够表示最后结果,这时就需要用到高精度算法.高精度算法的本质是把大数拆成若干固定长度的块, ...

  5. Hbase与Maven工程的Spring配置笔记

    1.HBase基本操作 hbase shell: 连接到正在运行的HBase实例 help: 显示一些基本的使用信息以及命令示例. 需要注意的是: 表名, 行, 列都必须使用引号括起来 create ...

  6. linux man指令的详解

    原创内容,欢迎指正 一.基本操作 大多数linux发行版自带用以查找shell命令及其他GNU工具信息的在线手册,man命令就是用来访问存储在linux系统上的手册页面. 例如,查看ls命令手册,语法 ...

  7. 使用IntelliJ IDEA创建Maven工程

    1. 新建项目(点击“+ Create New Project”): 2. 选择Maven,不必选择项目骨架,直接点击Next 按钮即可: 3. 输入项目名称,选择项目位置,输入组织名称,模块名称,项 ...

  8. React+wangeditor+node富文本处理带图片上传

    最近有个需求出现在我的视野中,因为我的另外的博客需要上传文章,但是我不想每次都在我的数据库中慢慢的修改格式,所以我另做了一个后台去编辑文本后发送给服务器,那么这里就涉及到两点,一个是富文本,一个是需要 ...

  9. 题解【[AHOI2013]作业】

    \[ \texttt{Preface} \] 数据貌似很水,据说 \(A_i\leq n\) ,连离散化都不需要. 不知道为啥设块大小为 \(\frac{n}{\sqrt m}\) 会一直 Runti ...

  10. 题解 SP375 【QTREE - Query on a tree】

    \[ \texttt{Preface} \] 这题在 \(\text{Luogu}\) 上竟然不能交 \(C++\) ,会一直 \(Waiting\) ,只能交非 \(C++\) 的语言. 所以打完了 ...