简单计算器

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 21518    Accepted Submission(s): 7722

Problem Description

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

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

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

Sample Input

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

Sample Output

3.00 13.36

Source

浙大计算机研究生复试上机考试-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 简单计算器【堆栈】相关推荐

  1. HDU1237 简单计算器

    http://acm.hdu.edu.cn/showproblem.php?pid=1237 题解:  对于中缀表达式的运算一般要转化成后缀表达式再作运算,开两个栈,一个作为操作数栈StackDigi ...

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

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

  3. 7-13 简单计算器 (25 分)

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

  4. 7-2 简单计算器 (13 分)

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

  5. PTA7-1 简单计算器 (25 分)

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

  6. 编译原理公式计算器C语言,编译原理课程设计-简单计算器实现.doc

    编译原理课程设计-简单计算器实现 课程设计报告课程:编译原理学号:姓名:班级:11级嵌入式应用技术班教师:时间:2014年6月计算机科学与技术系 设计名称:简单计算器的实现设计内容.目的与要求:设计内 ...

  7. 计算机软件技术实习 项目一 简单计算器的实现(实验准备)1-(1)

    目录 一.需求分析 二.重难点 三.编程语言 四.开发工具/平台 一.需求分析 1. 能通过设计的按钮控件输入并实现算术表达式,表达式在文本框中显示,运算结果输出显示: 2.保存和浏览历史运算记录: ...

  8. 实验一(一)简单计算器项目准备

    目录 一. 简单计算器介绍 二. 开发工具 三. 实现原理 1.栈 2.List 三. 表达式 1.运算符优先级 2.中缀表达式 3.后缀表达式 算法作用: 4.中缀表达式转化为后缀表达式 5.后缀表 ...

  9. c语言课程设计计算器程序分析,c语言课程设计简单计算器程序..docx

    课程设计名称:C语言课程设计 课程设计题目: 简单计算器程序 TOC \o "1-5" \h \z \o "Current Document" 第1章需求分析1 ...

最新文章

  1. boost::planar_face_traversal用法的测试程序
  2. 的图片怎么循环渲染_十分钟教你做个炫酷的图片切换过度效果
  3. i 智慧 | IBM存储:全面贯彻新存储的“智慧之道”
  4. 工作那些事儿(8)- 废旧立新
  5. puppet连载八:linux优化模块
  6. [导入]在asp.net中实现观察者模式,或有更好的方法(续)
  7. 运动目标跟踪(十九)--TLD
  8. 如何在Mac上打开和使用AirPlay,以便在更大的显示器上进行屏幕镜像?
  9. 不同shp图层合在一起_ps怎么把别的图层的合到一起
  10. 科技爱好者周刊:第 86 期
  11. IP地址冲突的原因及其解决方法
  12. Arduino Nano开发板设备描述符无法识别等问题汇总
  13. 不是你不懂黑盒攻击,而是你还不懂SurFree
  14. C语言输入三边求三角形面积
  15. webERP的网络资源
  16. LintCode 2017 光棍节
  17. 网络威胁分析师必须具备的十种能力
  18. fatal: unable to auto-detect email address (got 'root@bogon.(none)')(4:散列问题解决方案)
  19. CALayer mask属性实现蒙板效果
  20. 如何克隆所有远程分支?

热门文章

  1. FPGA乒乓球(碰碰球)游戏设计
  2. ArcGIS Enterprise 简介
  3. 更改powerdesigner的关系Notation的显示方式方法
  4. 大数据驱动,PPmoney或成中国版Capital One
  5. 华硕网吧服务器型号,网吧应用新平台 华硕P7F-C-SAS引领网吧服务器市场
  6. 【命令】如何将文件夹(永久)映射成虚拟硬盘
  7. 《了不起的 JavaScript 工程师 - 电子书》
  8. 最简单易懂的24点解法(Java实现)
  9. 智慧餐车机器人系统数据流图
  10. 南京邮电大学C语言实验报告6v2(仅供参考)