牛蛙资源网 - 只为资源而生,分享永无止境
牛蛙资源网-只为资源而生,分享永无止境,牛蛙网

四则运算的括号有什么作用(四则运算法则有括号的运算)

牛蛙小编 交流杂谈

四则运算符的来源,四则运算(支持括号)原理 *** (接昨天的写)

7、最后考虑一下带括号的算法

//四则运算考虑的东西多了哈,我们先弄不带括号的 function calc(expr, pos) { if (expr==null || expr==undefined || expr.length==0) return "表达式不能为空" var pos = (!pos)?{val:0}:pos //表示当前字符串取到第几位了,初始化值为 0 expr = [...expr //将"abc"转换成['a','b','c' 方便操作 //四则运算,我们要考虑优先级 //为了便于理解,咱们不搞什么二叉树和前缀表达式之类的东西 //就按我们正常的计算步骤来 //弄个操作符数组 var ops = [ //存放操作符 { op:'+', lnum:{v:0}, rnum:{v:0} } var ch = getValidChar(expr, pos) var num1 = 0 if (ch=="(") { num1 = calc(expr, pos) } else { pos.val-- //不是括号就归还,留给后头重取 num1 = getNum(expr, pos) if (num1==null) return "四则运算必须以数字开头" } num1 = {v:num1} //除了首尾两个数字,中间的数字肯定同属于两个操作符 //生成对象,并将对象同时赋给两个操作符,这样不管是哪边先算 //最后都会改变另一个操作符的数字 while(true) { var ch = getValidChar(expr, pos) if (ch==')') break //遇到括号结束就退出 else pos.val-- //归还 var op = getOp(expr, pos) if (op==null) break //取不到操作符了,说明前一个数字是最后一个数字 var ch = getValidChar(expr, pos) var num2 = 0 if (ch=="(") { num2 = calc(expr, pos) } else { pos.val-- num2 = getNum(expr, pos) if (op==null) return "四则运算必须以数字结束" } num2 = {v:num2} op = { op:op, ln:num1,rn:num2 } //操作符,左边是num1,右边是num2 ops.push(op) num1.rp = op //num1的右侧是 op num2.lp = op //num2的左侧是 op num1 = num2 //当前操作符的右边数字,将会成为下一个操作符的左边数字哈 } if (ops.length==0) return num1 //一个操作符都没有,那就是一个单独的数字了哦,返回它本身就行了 else return _calc(ops, expr) //返回计算结果 function _calc(ops, expr) { //将操作符按优先级排序并反转,适用于 pop 操作 ops = ops.sort((a,b)=>{ return level[b.op - level[a.op } ).reverse() var lastRet = null while(ops.length>0) { var op = ops.pop() //取操作符 lastRet = doCalc(op.ln.v, op.op, op.rn.v) //取操作符左右数字一起计算 var ret = { v:lastRet, lp:op.ln?.lp, rp:op.rn?.rp } //计算结果继承其左数的左边操作数符,和右数的右边操作符 if (op.ln.lp!=null) op.ln.lp.rn = ret //左侧操作符更新为新结果 if (op.rn.rp!=null) op.rn.rp.ln = ret //右侧操作符更新为新结果 } return lastRet //返回最后的值 } }

接下来看看,有不带括号和带括号的四则运算的程序有啥区别(还记得之前提到过的 bycompare 吗?)

1、增加了 pos 参数(之一次进入时,pos为null,咱们可以定义为 { val:0 },递归调用的时就用传入的 pos。

2、取数字前,先看一下数字前是不是有左括号,有的话,我们就先计算括号里头的表达式,并将其计算结果作为我们的数字1.

3、在 while true 循环里,我们取操作符前检查一下是否有右括号,有的话就表示括号里的内容取完了,跳出并开始括号里的内容计算。

4、在操作符后取第二个数字的时候,继续先判断括号是否存在。

,四则运算可以用括号吗四则运算的括号有什么作用


    收藏永久发布页,不迷路
    关键词不能为空

免责声明:

本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail: 1470282@qq.com

我来说两句
签到
交流杂谈 四则运算的括号有什么作用(四则运算法则有括号的运算)
四则运算符的来源,四则运算(支持括号)原理 *** (接昨天的写) 7、最后考虑一下带括号的算法 //四则运算考虑的东西多了哈,我们先弄不带括号的...
扫描二维码阅读原文 扫描二维码阅读原文
牛蛙资源网 January, 01
生成社交图 ×