您的位置:首页 > 编程开发 > 易语言

负数无限精度的四则运算

:7.373KB :2021-03-11 10:51:43

原理:平时数学上写的叫中缀表达式“例如 (1+2)*3 ”分两步走,第一步转化为后缀表达式“例如 1 2 + 3 * ”第二步用后缀表达式计算结果并返回
中缀表达式只含有:加、減、乘、除、左括号、右括号,转成后缀表达式既能去掉了括号又能处理好运算优先级
易语言负数无限精度的四则运算例子
概念:用到一个叫“栈”的概念,可以理解成数组变量,储存很多个元素,
(例如羽毛球筒,装羽毛球进去后,拿出来时必须是先拿出最后放进的那个羽毛球,也就是后进先出的原则)
入栈:往里面添加一个元素,出栈:从栈里拿出最后添加进去的那一个元素,并且栈内不再保留这个元素(入一个多一个,出一个少一个)
栈顶元素:最后入栈的那个元素,也就是能最先出栈的元素;栈底元素:最先入栈的那个元素,也就是最后才能出栈的元素

第一步、中缀转换后缀表达式的原理(用到一个栈,用来存放运算符):
处理负数:"-"前面一个字符是数字或者),则认为是减号;否则是负号;
1、从左往右扫描中缀表达式,遇到操作数:直接输出(添加到后缀表达式右边)
2、栈为空时,遇到运算符:直接入栈
3、遇到左括号:将其入栈
4、遇到右括号:把栈内元素(操作符)依次出栈,依次添加到后缀表达式右边,直到栈内遇到左括号为止(此左括号丢弃,即不用加到后缀表达式上,也不留在栈里)
5、遇到其他运算符,加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素(依次添加到后缀表达式右边),
然后将遇到的该运算符入栈。有一点需要注意,只有在遇到" ) "的情况下我们才弹出" ( ",其他情况我们都不会弹出" ( ",
也就是:遇到的运算符不是右括号的话,弹出符号时,如果遇到栈内弹到了左括号,那就别再弹了,左括号就留在里面的意思。
6、扫描完中缀表达后,最终将栈内的元素依次出栈,添加到后缀表达式右边,即可得到一个完整的后缀表达式

第二步、用上一步得到的后缀表达式进行计算出结果(用到一个栈,用来存放操作数,这次就不是放运算符了,比如存放 1+2 里面的 1 2,而不是存放 + ):
1、设置一个栈,开始时,栈为空
2、从左到右扫描后缀表达式,若遇操作数,则进栈
3、若遇运算符,则从栈中退出两个元素,先退出的放到运算符的右边,后退出的放到运算符左边,运算后的结果再进栈,直到后缀表达式扫描完毕
4、最后,栈中仅有一个元素,即为运算的结果

安卓QQ的ECDH算法
高性能字节集与文本格式互转