支持四则运算的计算器的实现算法

1.      四则运算的实现算法

  a.      对于一个输入表达式,分别找到表达式中  "*" , "/" , "+" , "-" 在表达式中的位置。

  b.      如果“*",“/“ 符号存在,则位置靠前的运算符为当前选定运算符。

  c.      如果“*",“/“ 符号不存在,则位置靠前的 "+" 或者  "- " 为当前选定运算符。

  d.      从选定运算符的左边向左遍历,截取左操作数,遇到新的运算符或者表达式的第一个字符,则遍历结束。取得左操作数,并记下左操作数的起始位置。

  e.      同理,获取右操作数,并记下右操作数的结束位置。

  f.       将左右操作数参与运算的结果,插入回原来表达式 (替换掉左操作数的起始位置 和 右操作数的结束位置之间)

  g.      返回,继续按照同样的顺序计算,直到当前表达式不含有加减乘除运算符,则认为运算结束。

2.      运算符号(+,-,*,/)的输入响应

  a.      当前输入字符串的最后一个字符如果不是数字,则将最后的字符替换成当前的字符。

3.      小数点的输入响应

  a.      从当前输入字符串末端开始获取当前运算因数,如果当前运算因数为空,则在输入字符串后拼接上"0.";

  b.      当前运算因数不为空,但是当前因数已经包含小数点,则忽略当前小数点;

  c.      当前运算因数不为空,并且未包含小数点,则在输入字符串后加上小数点。

4.      等号的响应

  a.      计算最后结果,不是数字时(小数点或者运算符号),去掉最后一个字符;

5.      数字键的响应

  a.      上一次有效输入是“=”,则应该先清空上一次的计算,开始新一轮的计算。

6.      Javascript 浮点数计算精度问题

  a.      0.2 + 0.1 结果不等于0.3. 原因跟计算机对于浮点数的编码规则有关,计算机组成原理提到这个问题,具体细节忘了。

  b.      解决办法:先将参与运算的操作数提升成整数,运算,然后再降低。

  c.      0.2 - > 2 , 0.1 -> 1, 3 -> 0.3

程序地址:http://liujiangyi123.oschina.io/calculator-v2.0/

时间: 2024-10-11 19:45:52

支持四则运算的计算器的实现算法的相关文章

【表空间支持的最大数据文件大小的算法】【数据库限制】【数据文件文件头保留数据块数】

本地管理表空间中设置不同大小的db_block_size时数据文件头保留空间相应例如以下:--?? db_block_size=2KB,文件头保留32个数据块,即64KB. db_block_size=4KB.文件头保留16个数据块,即64KB. db_block_size=8KB,文件头保留8个数据块,即64KB. db_block_size=16KB,文件头保留4个数据块.即64KB. db_block_size=32KB,文件头保留4个数据块.即128KB. --为什么不是64kb? 默认

java-swing编程,实现计算器——支持四则运算

摘自:Ecqiao package cal; import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel;

具有编译功能支持无限大数计算器的实现

本篇是MathAssist的第三篇,将在上篇所实现的BigNumber基础上完成具有编译功能支持无限大数的计算器SuperCalculator. 要想从形如 "(1.23435+sin(0.5*180/PI))*2468.2345" 字符串格式的表达式中求值,需要使用编译原理的知识,不过在一般的<数据结构>课程中都会讲解基础的表达式求值问题,而本篇也是在数据结构课程的基础上稍加拓展而实现. 多叉树的节点类型 node继承体系 表达式的值,一般将其转化成二叉树结构,根节点表示

第14课 计算器核心解析算法(下)

1. 中缀到后缀的手工转换 (1)按优先级给表达式加括号 (2)从内向外将运算符移动对应的括号后面 (3)去括号,即可得到后缀表达式(如下图,图中数字表示转换顺序) 2. 后缀表达式求值 2.1 图解后缀表达式求值过程 (1)从左向右扫描后缀表达式. (2)遇到数字直接进栈 (3)重点在于遇到运算符时,要找到其左右操作数.(此图中有5个运算符,分别是*./.-.*.+) 2.2 求值步骤(利用栈来进行运算,注意栈只用来保存操作数,并不保存操作符) (1)当前元素为数字:进栈 (2)当前元素为运算

第十三课、计算器核心解析算法(中)

一.中缀转后缀 1.中缀表达式转后缀表达式的过程类似编译过程 (1).四则运算表达式中的括号必须匹配 (2).根据运算符优先级进行转换 (3).转换后的表达式中没有括号 (4).转换后可以顺序计算出最后结果 2.转换过程 (1).当元素e为数字:输出 (2).当元素e为运算符: A.与栈顶运算符进行优先级比较 B.小于等于:将栈顶元素输出,转A执行 C.大于:将当前元素e入栈 (3).当前元素为e为左括号:入栈 (4).当前元素e为右括号: A.弹出栈顶元素并输出,直至栈顶元素为左括号 B.将栈

QT之计算器核心解析算法

上节我们说到计算机默认的是后缀表达式,那么中缀表达式转后缀表达式的过程就类似于编译过程. 必须得注意这么几个问题:四则运算表达式中的括号必须匹配:根据运算符优先级进行转换:转换后的表达式中没有括号:转换后可以顺序计算出最终结果.下来我们就讲下具体的转换过程:1.当前元素 e 为数字:输出2.当前元素 e 为运算符时:1. 与栈顶运算符进行优先级比较:2.小于等于时将栈顶元素输出,转1:3.大于时将当前元素 e 入栈3.当前元素 e 为左括号:入栈4.当前元素 e 为右括号:1.弹出栈顶元素并输出

计算器核心解析算法(上)

计算机如何读懂四则运算表达式?9.3 + (3 - -0.11) * 5 后缀表达式人类习惯的数学表达式叫做中缀表达式另外,还有一种将运算符放在数字后面的后缀表达式5 + 3——> 5 3 +1 + 2 * 3 ——> 1 2 3 * +9 + (3 - 1) *5 ——> 9 3 1 - 5* + 中缀表达式符合人类的阅读和思维习惯后缀表达式符合计算机的运算方式——消除了中缀表达式中的括号——同时保留中缀表达式中的运算优先级 解决方案1.将中缀表达式进行数字和运算符的分离2.将中缀表达

QT之计算器对四则运算表达式的解析

前面我们已经关于计算器介绍的已经够多了,那么它现在还是没有具备计算的功能. 今天我们来继续讲解计算器的解析算法,那么对于一个四则运算表达式, 它是如何读懂的呢?比如:"+9.11 + ( -3 - 1 ) * -5 ": 人类习惯的数学表达式叫做中缀表达式,还有一种将运算符放在数字后面的后缀表达式, 比如:5 + 3 ==> 5 3 +: 1 + 2 * 3 ==> 1 2 3 * +;像这种就是后缀表达式. 那么中缀表达式是符合人类的阅读和思维习惯,后缀表达式则符合计算机

星尘计算器开发日志

高一的时候开始接触Java ME的编程,便产生了写一个计算器的想法,主要是因为自己对计算器的兴趣.热情和了解,同时在当时的Java ME平台上没有好用的计算器.当时每周回家只有几个小时的电脑时间,甚至有时只能用手机写代码,在学校的时候经常拿出本子手写代码,作为一种放松方式.这是一个缓慢艰难但有趣的过程,并且我也享受其中.于是断断续续地,终于写出一个雏形来了,支持常见的函数和数值微积分,简单的编程(do,while,自定义函数和变量),有3000~4000行,然后写了一个简单的界面,随便弄了一个图