HDU1237 简单计算器【堆栈】
简单计算器
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 21518 Accepted Submission(s): 7722
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input
1 + 2 4 + 2 * 5 - 7 / 11 0
Sample Output
3.00 13.36
浙大计算机研究生复试上机考试-2006年
问题链接:HDU1237 简单计算器。
问题描述:参见上文。
问题分析:这是一个表达式求值问题,可以用递归来处理,也可以用堆栈来处理。
程序说明:程序中,使用堆栈来处理运算符的优先级,运算符和操作符分别放在两个堆栈中。
参考链接:(略)
AC的C++语言程序:
/* HDU1237 简单计算器 */#include <iostream>
#include <string>
#include <stack>
#include <cctype>
#include <cstdio>using namespace std;int main()
{string s;stack<char> op;stack<double> operand;double operand1, operand2;while(getline(cin, s) && s != "0") {for(int i=0; s[i]; i++) {if(isdigit(s[i])) {operand1 = 0;while(isdigit(s[i])) {operand1 = operand1 * 10 + s[i] - '0';i++;}i--;operand.push(operand1);} else if(s[i] == '+' || s[i] == '-') {if(op.empty())op.push(s[i]);else {char sop = op.top();op.pop();operand2 = operand.top();operand.pop();operand1 = operand.top();operand.pop();if(sop == '+')operand.push(operand1 + operand2);elseoperand.push(operand1 - operand2);op.push(s[i]);}} else if(s[i] == '*' || s[i] == '/') {char cop = s[i];i += 2;operand2 = 0;while(isdigit(s[i])) {operand2 = operand2 * 10 + s[i] - '0';i++;}i--;operand1 = operand.top();operand.pop();if(cop == '*')operand.push(operand1 * operand2);elseoperand.push(operand1 / operand2);}}while(!op.empty()) {char sop = op.top();op.pop();operand2 = operand.top();operand.pop();operand1 = operand.top();operand.pop();if(sop == '+')operand.push(operand1 + operand2);elseoperand.push(operand1 - operand2);}printf("%.2f\n", operand.top());}return 0;
}
HDU1237 简单计算器【堆栈】相关推荐
- HDU1237 简单计算器
http://acm.hdu.edu.cn/showproblem.php?pid=1237 题解: 对于中缀表达式的运算一般要转化成后缀表达式再作运算,开两个栈,一个作为操作数栈StackDigi ...
- L2-1 简单计算器 (25 分)详解c语言 模拟堆栈
L2-1 简单计算器 (25 分) 本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器.如上图所示,计算器由两个堆栈组成,一个堆栈 S1存放数字,另一个堆栈 S2 存放运算符.计算 ...
- 7-13 简单计算器 (25 分)
7-13 简单计算器 (25 分) 本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器.如上图所示,计算器由两个堆栈组成,一个堆栈 S1 存放数字,另一个堆栈 S2 存放运算符.计 ...
- 7-2 简单计算器 (13 分)
** 7-2 简单计算器 (13 分) ** 本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器.如上图所示,计算器由两个堆栈组成,一个堆栈S1存放数字,另一个堆栈S2存放运算符.计算 ...
- PTA7-1 简单计算器 (25 分)
PTA7-1 简单计算器 (25 分) 本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器.如上图所示,计算器由两个堆栈组成,一个堆栈 S1 存放数字,另一个堆栈 S2 存放运算符 ...
- 编译原理公式计算器C语言,编译原理课程设计-简单计算器实现.doc
编译原理课程设计-简单计算器实现 课程设计报告课程:编译原理学号:姓名:班级:11级嵌入式应用技术班教师:时间:2014年6月计算机科学与技术系 设计名称:简单计算器的实现设计内容.目的与要求:设计内 ...
- 计算机软件技术实习 项目一 简单计算器的实现(实验准备)1-(1)
目录 一.需求分析 二.重难点 三.编程语言 四.开发工具/平台 一.需求分析 1. 能通过设计的按钮控件输入并实现算术表达式,表达式在文本框中显示,运算结果输出显示: 2.保存和浏览历史运算记录: ...
- 实验一(一)简单计算器项目准备
目录 一. 简单计算器介绍 二. 开发工具 三. 实现原理 1.栈 2.List 三. 表达式 1.运算符优先级 2.中缀表达式 3.后缀表达式 算法作用: 4.中缀表达式转化为后缀表达式 5.后缀表 ...
- c语言课程设计计算器程序分析,c语言课程设计简单计算器程序..docx
课程设计名称:C语言课程设计 课程设计题目: 简单计算器程序 TOC \o "1-5" \h \z \o "Current Document" 第1章需求分析1 ...
最新文章
- boost::planar_face_traversal用法的测试程序
- 的图片怎么循环渲染_十分钟教你做个炫酷的图片切换过度效果
- i 智慧 | IBM存储:全面贯彻新存储的“智慧之道”
- 工作那些事儿(8)- 废旧立新
- puppet连载八:linux优化模块
- [导入]在asp.net中实现观察者模式,或有更好的方法(续)
- 运动目标跟踪(十九)--TLD
- 如何在Mac上打开和使用AirPlay,以便在更大的显示器上进行屏幕镜像?
- 不同shp图层合在一起_ps怎么把别的图层的合到一起
- 科技爱好者周刊:第 86 期
- IP地址冲突的原因及其解决方法
- Arduino Nano开发板设备描述符无法识别等问题汇总
- 不是你不懂黑盒攻击,而是你还不懂SurFree
- C语言输入三边求三角形面积
- webERP的网络资源
- LintCode 2017 光棍节
- 网络威胁分析师必须具备的十种能力
- fatal: unable to auto-detect email address (got 'root@bogon.(none)')(4:散列问题解决方案)
- CALayer mask属性实现蒙板效果
- 如何克隆所有远程分支?