当前位置: 首页 > news >正文

算术表达式计算

一个字符串算术表达式通过程序计算结果:将中缀表达式转换为前缀表达式或后缀表达式,然后根据前后缀表达式的规则进行计算得出结果。

前缀表达式计算规则:

从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 op 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。
例如前缀表达式“- × + 3 4 5 6”:
(1) 从右至左扫描,将6、5、4、3压入堆栈;
(2) 遇到+运算符,因此弹出3和4(3为栈顶元素,4为次顶元素,注意与后缀表达式做比较),计算出3+4的值,得7,再将7入栈;
(3) 接下来是×运算符,因此弹出7和5,计算出7×5=35,将35入栈;
(4) 最后是-运算符,计算出35-6的值,即29,由此得出最终结果。
可以看出,用计算机计算前缀表达式的值是很容易的。

后缀表达式计算规则:

与前缀表达式类似,只是顺序是从左至右:
从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。
例如后缀表达式“3 4 + 5 × 6 -”:
(1) 从左至右扫描,将3和4压入堆栈;
(2) 遇到+运算符,因此弹出4和3(4为栈顶元素,3为次顶元素,注意与前缀表达式做比较),计算出3+4的值,得7,再将7入栈;
(3) 将5入栈;
(4) 接下来是×运算符,因此弹出5和7,计算出7×5=35,将35入栈;
(5) 将6入栈;
(6) 最后是-运算符,计算出35-6的值,即29,由此得出最终结果。

转载于:https://www.cnblogs.com/yangfei-beijing/p/6951811.html

相关文章:

  • 比特币交易网站收到银行销户通知
  • H3C交换机经常使用命令汇总
  • 2017 MacBook Pro比去年的机型快了20%
  • 移动端页面弹出对话框效果Demo
  • qTunnel —— Go 开发的安全 Socket 网络隧道
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • 你猜!GitHub 最大开源贡献者是谁?
  • SecureCRT图形界面(通过设置调用Xmanager - Passive程序)
  • 关于linux文件中inode的理解
  • 二维数组查找
  • Linux系统编程——进程替换:exec 函数族
  • 恶灵传说之老程序员
  • 安装zabbix 遇到的故障
  • 场景案例:多表关联update(用户积分奖励)
  • Node.js+Koa开发微信公众号个人笔记(一)准备工作
  • interface和setter,getter
  • js面向对象
  • leetcode388. Longest Absolute File Path
  • Linux中的硬链接与软链接
  • MySQL用户中的%到底包不包括localhost?
  • SSH 免密登录
  • 规范化安全开发 KOA 手脚架
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 区块链分支循环
  • 人脸识别最新开发经验demo
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 使用common-codec进行md5加密
  • 我与Jetbrains的这些年
  • 移动端解决方案学习记录
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​虚拟化系列介绍(十)
  • (Git) gitignore基础使用
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (二)JAVA使用POI操作excel
  • (附源码)计算机毕业设计SSM智慧停车系统
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET CLR Hosting 简介
  • .net core 6 redis操作类
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net 调用php,php 调用.net com组件 --
  • .NET的微型Web框架 Nancy
  • .Net语言中的StringBuilder:入门到精通
  • /run/containerd/containerd.sock connect: connection refused
  • @Autowired和@Resource装配
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @ModelAttribute 注解
  • @Transient注解
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [《百万宝贝》观后]To be or not to be?
  • [17]JAVAEE-HTTP协议
  • [Android]使用Retrofit进行网络请求
  • [BZOJ] 1001: [BeiJing2006]狼抓兔子