用计算机连乘带加怎么算,计算器核心算法(一)
我们大家都知道,我们在学习每一门语言的时候,基本上的人都写了计算器,那么你还记得你当时为了实现连加,连乘,连除,连减,多层括号是如何实现的么,如果你用了几十行就搞定了,那么你是高手,当然了,这里就是来介绍是如何实现的,这是我当时写计算器的时候采用的方法,如果喜欢记得点赞哦。。。
一.先实现没有括号的连加运算
2+5+6
上面是一个简单的等式,我们的任务就是能计算出它的结果,首先你看到这个你可能也会想到拆分,把每一个字符拆分到集合中,然后进行判断处理,但是今天只采用拆分,不采用集合
上面的等式可以拆分成 "2" "+" "5" "+" "6"
现在开始顺着我的思路走哦~~~
可以看到我定义了一个parse方法,我就像通过调用这个方法就能返回正确的结果,那么我们先实现最简单的一种
直接返回字符串的双精度的值,那么你们有疑问了,这有什么软用?不,我告诉你,这有用,-->它实现了一个字符串的数字转化成了一个真正的数字
可以看到这里顺利的完成了转化,现在不理解没关系,往下看
现在的这个方法就好像一个小孩子,它只认识字符串的数字
那么现在孩子慢慢长大,他遇到了加号+
这时候这个小孩子根本不会算,但是他发现他会算里面的一部分,也就是里面的"2"和"5"
于是这个小孩子把它拆出来,于是parse方法就多了一个判断,如下:
可以看到,它对加号前后进行了拆分,然后又调用自己,因为拆出来的是一个字符串的数字,这个孩子之前就已经认识它了,所以调用自己能算出结果,然后中间采用加号相加,这样子就实现了"2+5"
如果跟着写的亲们,自己就应该能发现,这里不仅实现了"2+5"还实现了"2+5+6+8"连加的功能,哇塞,好神奇啊发现,这是因为这个方法它发现加号就会拆分,所以"2+5+6+8" 就变成了"2" + "5+6+8" --> "2" + "5" + "6+8" -->"2" + "5" + "6" + "8"
这样子拆出来的每一个都是一个字符串的数字,所以都能算出来并且返回
这就是递归,很多时候递归确实只能靠自己想,我也很难给你们讲清楚,但是递归和while循环有一点是一样的,必须有一个条件是终止的,在递归里面就是必须有一个时候是要有确定返回值的,我们这里确定的返回值就是return Double.parseDouble(content);
大家好好理解一下,虽说代码就几句,但是里面意义还得靠大家自己仔细研究研究。好了话不多说,我们接下去分析
之前我们为什么拿"+"先作判断,这是因为加号两边的等式是可以先算出来的,不影响最后的结果,如果不懂,请回到小学课堂,听老师再给你念叨念叨~~~~
二.实现加减混合的计算
我们知道上面我们已经实现了连加,其实连减的道理也是一样的
图中标记出来的地方,如果代码走到了这里,说明等式里面已经没有"+"了,为什么呢,因为"+"上面有判断,如果存在就直接再if语句中返回了,所以走到了标记处等式中必须没有"+"号
"2-3+8-4" 那么如果现在的字符串是这样子的,会被拆分成"2-3" "+" "8-4"
加好两边还是调用parse方法,"2-3"这个等式就走到了标记的地方,然后现在这个方法不能算啊,除了加好不认识其他的,所以标记的地方又得做相同的判断了
可以看到做了一个和"+"号很类似的判断,只不过寻找减号的方法是lastIndexOf("-") 为什么是这个呢,因为最后一个减号前后的等式先计算这是不影响结果的
假如一个等式"8-2-6" 答案是0大家都是知道的,如果你弄成"8" - "2-6" 这就完全不一样了,这个值就变成了 8-(-4) -->8+4-->12
但是你按照最后一个减号前后拆分 "8-2" - "6" --> "6" - "6" -->0答案是正确的!
所以就是这里不一样,其他还是和加号一样是自己调用自己,如此已经实现了连加连减的混合运算啦
可以看到都是没有问题的
三.实现连加连减连乘法
我们前面已经实现了连加连减,所以走到减号判断的下面的等式是没有加号和减号啦
走到箭头的标记处的等式是只有"*"和"/"啦,所以我们现在就实现对乘号的判断,原理一样,我就不解释了,直接上代码了
和加号一样,是不是很简单了?那么最后除号也一并解决吧
到这里已经实现了+-*/的混合等式的运算,而且代码量简直就是少的可怜,后面还是复制粘贴的,这里最关键就是让大家理解递归的思想,一个方法我比喻成一个小孩子,开始值认识一个字符串的数字,后来能认识"+",知道了拆分。。。。。然后成为了大人,成功学会了混合运算
这里我对代码进行测试
可以看到都是没有问题的,那么小金子我先吃饭啦,后面的括号的实现,容我吃完饭,下一个博客再给大家说哈
用计算机连乘带加怎么算,计算器核心算法(一)相关推荐
- 赋予人工智能记忆的人,带你梳理深度学习核心算法
新智元翻译1 来源:Idsia 作者:Jürgen Schmidhuber 翻译:张巨岩 作者介绍:Jürgen Schmidhuber 被称为是赋予人工智能记忆的人,递归神经网络之父,2004 年到 ...
- 怎样用计算机算出圆周率,古代没有计算机的时代 祖冲之是如何算出圆周率的...
原标题:古代没有计算机的时代 祖冲之是如何算出圆周率的 今天趣历史小编就给大家带来祖冲之的文章,希望能对大家有所帮助. 祖冲之,提起这个名字大家首先想到的就是圆周率,因为,圆周率是祖冲之的代表性成果. ...
- 计算机ctrl加什么作用,计算机中快捷键ctrl加什么是返回上一步
计算机中快捷键ctrl加什么是返回上一步 发布时间:2021-06-10 11:33:52 来源:亿速云 阅读:67 作者:小新 这篇文章主要为大家展示了"计算机中快捷键ctrl加什么是返回 ...
- 求的带权图最小生成树的Prim算法和Kruskal算法
求的带权图最小生成树的Prim算法和Kruskal算法 最小生成树的概念 最小生成树其实是最小权重生成树的简称. 一个连通图可能有多个生成树.当图中的边具有权值时,总会有一个生成树的边的权值之和小于或 ...
- 生成小学加减口算题JAVA算法
生成小学加减口算题JAVA算法 package com.jianchi.fsp.generationchildrenarithmetic;import java.io.Serializable; im ...
- 学生们能够使用计算机,学生用计算机基础复习题带答案.doc
学生用计算机基础复习题带答案.doc 试卷一 一.选择题(请将答案填写在答题纸上) 1. 人们习惯于将计算机的发展划分为四代.划分的主要依据是B. 计算机的运行速度 计算机主机所使用的主要元器件 计算 ...
- 适合防抄板,耗材认证,核心算法授权,程序保护,数据传输加解密等应用的逻辑加密芯片和带安全内核加密芯片
适合防抄板,耗材认证,核心算法授权,程序保护,数据传输加解密等应用的逻辑加密芯片和带安全内核加密芯片.有需求的朋友可以了解下: 1.品牌:MICROCHIP/ATMEL 国别:美国:代表型号:ATS ...
- 重庆市计算机一级理论题,重庆市计算机一级题库加答案
重庆市计算机一级题库加答案 重庆市高等学校非计算机专业学生计算机等级考试大纲重庆市高等学校非计算机专业学生计算机等级考试大纲(一级考试大纲)(一级考试大纲)考试要求掌握计算机基础知识,了解计算机系统的 ...
- 计算机大机实验报告,大学计算机一实验报告二大学算机一实验报告二大学计算机一实验报告二大学计算机一实验报告二.doc...
大学计算机一实验报告二大学算机一实验报告二大学计算机一实验报告二大学计算机一实验报告二 广东金融学院实验报告 课程名称:大学计算机Ⅰ 实验编号 及实验名称实验二中文Word 2010 实验系 别姓 名 ...
最新文章
- 一切都不能够想当然D
- fsolve函数求解非线性方程
- ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator
- 菜鸟教程之工具使用(六)——让Maven项目直接在eclipse内部的Tomcat中执行
- C语言实现字符串匹配KMP算法
- django时间问题和时区设置
- 类选择器遍历赋值_利用反射实现配置表数据到类对象数据的转换
- Mysql学习总结(28)——MySQL建表规范与常见问题
- bz2解压命令_Linux文件操作之文件压缩与解压缩命令详解
- MyEclipse插件不能安装原因
- jsdroid 教程_教程24富怡服装cad软件V8安装包送操作说明书自学180部视频教程制版排料放码工具操作教学打赏49.8大洋...
- 1433抓鸡的原理详解以及防范
- 软件设计师第二章知识点_作为设计师,您可能会找到的最好的第二次展示
- widows 下git记住账号密码
- 数据分析系列学习之My SQL(一)初识My SQL
- 大数据工程师零基础起步——成长路线引入
- 18在protel DXP中PCB图中给电路板绘制边框、安装孔的方法介绍成都电路板设计
- 嵌入式Linux 串口编程系列1——基本知识、termios结构体
- [小黄书后台]Insomnia及HelloWorld
- android recovery中文下载地址,Android Recovery模式与Recovery界面的中文详细说明