题干:

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

Input

测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

Output

对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。

Sample Input

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

Sample Output

3.00
13.36

解题报告:

栈的应用,因为运算有优先级,在刚开始考虑乘法和除法,如果运算符是加法,则直接把那个数字压入栈里,如果是减法,则把那个数的相反数压入栈里,如果是乘法,则取栈头的数相乘,pop出后把结果push进去。

AC代码:

#include<bits/stdc++.h>using namespace std;
char s[205];
int main()
{while(1) {gets(s);if(s[0] == '0' && strlen(s) == 1) break;stack<double > sk;int tmp = 0,flag=1;for(int i = 0; i<strlen(s); i++) {if(s[i] == ' ') continue;else if(s[i] == '+') flag=1;else if(s[i] == '-') flag=2;else if(s[i] == '*') flag=3;else if(s[i] == '/') flag=4;else {tmp = 0;while(s[i]>='0' && s[i] <= '9') {tmp = tmp*10 + (s[i] - '0');i++;}i--;switch(flag) {case 1 : sk.push(tmp);break;case 2 : sk.push(-tmp);break;case 3 : {double x = sk.top() * tmp;sk.pop();sk.push(x);tmp=0;break;}case 4 : {double x = sk.top() / tmp;sk.pop();sk.push(x);tmp=0;break;}}}}double ans=0;while(!sk.empty()) {ans += sk.top();sk.pop();}printf("%.2f\n",ans);}return 0 ;
}

AC代码2:(在https://leetcode-cn.com/problems/basic-calculator-ii/提交)

class Solution {
public:int calculate(string s) {stack<int> sk;int sign = 1;for(int i = 0; i<s.length(); i++) {if(s[i] == ' ') continue;else if(s[i] == '+') sign = 1;else if(s[i] == '-') sign = 2;else if(s[i] == '*') sign = 3;else if(s[i] == '/') sign = 4;else {int tmp = 0;while(i < s.length() && s[i]>='0'&&s[i]<='9') {tmp = tmp * 10 + (s[i] - '0');i++;}i--;if(sign == 1) sk.push(tmp);if(sign == 2) sk.push(-tmp);if(sign == 3) {int x = sk.top();sk.pop();sk.push(x*tmp);}if(sign == 4) {int x = sk.top();sk.pop();printf("%d %d",x,tmp);sk.push(x/tmp);}}}int ans = 0;while(sk.size()) {ans += sk.top();sk.pop();}return ans;}
};

错误代码:

#include<bits/stdc++.h>using namespace std;
char s[10000];
int main()
{while(1) {gets(s);if(s[0] == '0') break;stack<double > sk;int tmp = 0;for(int i = 0; i<strlen(s); i++) {if(s[i] == ' ') continue;else if(s[i] == '+') sk.push((double)tmp),tmp=0;else if(s[i] == '-') sk.push((double)-tmp),tmp=0;else if(s[i] == '*') {double x = sk.top() * tmp;sk.pop();sk.push(x);tmp=0;}else if(s[i] == '/') {double x = sk.top() / tmp;sk.pop();sk.push(x);tmp=0;}else {tmp = tmp*10 + (s[i] - '0');}}double ans=0;while(!sk.empty()) {ans += sk.top();sk.pop();}printf("%.2f\n",ans);}return 0 ;
}

总结:

这个错误代码都不知道是什么一个思路,所以做这种题,每一步实现的功能需要很明确,比如我如果要读入数,那就一次性都读完,别一个一个读,会造成最后读入的一个数读不进去等问题存在!

【HDU - 1237】简单计算器 (栈模拟)相关推荐

  1. HDU 1237 简单计算器(模拟)

    Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值 Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间 ...

  2. HDU - 1237简单计算器(输出问题)

    简单计算器 HDU - 1237 题目 题解 代码 题目 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行 ...

  3. HDU 1237 简单计算器

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

  4. HDU - 1237 简单计算器

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

  5. java 杭电1237简单计算器

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

  6. 【HDU】1237 简单计算器 (stack)

    http://acm.hdu.edu.cn/showproblem.php?pid=1237 题目很好理解,一开始想用优先队列,但好像有点难实现,用stack比较好实现,遇到" * &quo ...

  7. 每日一套codeforce集训1119E[贪心],821C[栈模拟],645D[拓扑排序]

    有n种长度的棍子,长度分别为2^0 ,2 ^ 1,-,2 ^ (n-1) ,每种棍子有a[i] 种,问你能组成多少个三角形. 三角形两边之和大于第三边,而2 ^ i + 2 ^ i = 2 ^ (i+ ...

  8. 模拟一个简单计算器_阅读模拟器的简单介绍

    模拟一个简单计算器 Read simulators are widely being used within the research community to create synthetic an ...

  9. L2-1 简单计算器 (25 分)详解c语言 模拟堆栈

    L2-1 简单计算器 (25 分) 本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器.如上图所示,计算器由两个堆栈组成,一个堆栈 S​1存放数字,另一个堆栈 S​2 存放运算符.计算 ...

  10. 简单计算器 (关于栈的一种应用)

    题目:简单计算器 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一 ...

最新文章

  1. 从JVM看类的加载过程与对象实例化过程
  2. break和continue特殊玩法“标签”
  3. xampp php5.6 7.1共存,New XAMPP with PHP 7.2.8, 7.1.20, 7.0.31 5.6.37
  4. JAVA学习(十)__MessageFormat用法
  5. Exec l 中分列的作用
  6. 敏捷转型历程 - Sprint3 一团糟的演示会
  7. oracle sql 取日期,Oracle SQL日期及日期格式获取命令,oraclesql
  8. axure不能导出图片_axure怎么导出图片 如何将原型另存为图片?
  9. Windows下硬盘存储情况可视化工具--WinDirStat
  10. 计算机硬盘与格式化,什么是磁盘格式化 格式化与快速格式化区别 - 驱动管家...
  11. 自费访学|计算机专业老师赴加拿大卡尔加里大学
  12. 微信浏览器自动关闭页面
  13. 【mysql】浮点类型
  14. vCenter Server 6.x在同站中重新指向新外部 PSC
  15. linux 下的无线网络配置,详解在LINUX环境下怎样设置无线网络配置
  16. 安装监控的地方没有WiFi,没有无线网络,如何实现远程监控?
  17. AOPlog4j2propagation的7种事务配置
  18. imx6 linux 开发环境,米尔iMX6UL开发板Linux操作系统的环境部署
  19. VUE学习笔记------奕长苏
  20. 用U盘制作PE启动盘安装Windows10系统

热门文章

  1. [Leetcode][第75题][JAVA][颜色分类][双(三)指针][计数排序]
  2. [Leedcode][JAVA][按摩师][动态规划]
  3. java创建两个foo方法_Java类实例化原理 - osc_foo7glsg的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. javascript用户登录_SAP HANA XS的JavaScript安全事项
  5. 微星刀锋 无法进入bios_夏天来了 微星主板风扇转速调节攻略
  6. java sleep方法_一文搞懂 Java 线程中断!
  7. 多个虚拟主机服务器,Windows多个虚拟主机服务器
  8. 对代理商的评价怎么写_简历中的自我评价怎么写才能更吸引人?
  9. 不显示表头_技术干货 | 基于数模混合型SoC实现的两线制高精度无源表头方案
  10. .config 和 kconfig以及 makefile的关系