实现计算器4则运算算法-分离算法 理论

来源:互联网 发布:ssh权限管理系统源码 编辑:程序博客网 时间:2024/06/05 01:00

1.问题

    计算机如何读懂四则运算表达式?

 例:  “10.3 +(-3 - -0.54)* 100” 

2.后缀表达式

 将运算符放在数字后面的后缀表达式

实例:

10 + 4 -> 10 4 +

        1 +2*3 -> 1 2 3 * +

         9 + (3 - 1) * 5 -> 9 3 1 -5 * +

后缀表达式消除了中缀表达式中的括号

同时保留中缀表达式中的运算优先级


3. 解决方案

 1.将中缀表达式进行数字和运算符的分离

 2.将中缀表达式转换为后缀表达式

3.通过后缀表达式计算 最终结果


所要计算的中缀表达式中包含

 - 数字和小数点【0-9 或 .】

- 符号位 【 + 或 -】

-运算符 【+,-,*,/】

- 括号 【(或)】


思想 : 以符号作为标志对表达式中的字符逐个访问

- 定义累计变量num(存储数字)

- 当前字符exp【i】为数字或小数点时:

  累计: num += exp【i】

-当前字符exp【i】为符号时:

 num 为运算数,分离并保存

若exp【i】为正负号:

   累计符号位 + 和 -: num += exp【i】

若exp【i】为运算符:

 分离并保存


伪代码:

for(int i=0; i<exp.length(); i++)

{

if ( exp[i] 为数字或小数点)

             累计: num += exp【i】;

         else if( exp[i] 为符号)

        {

            if (num != "")

               分离并保存运算数: num;

       

           if( exp[i]  为正号或负号)

               符号位累计 : num += exp【i】;

           else

          {

               分离并保存运算符 : exp【i】;

          }

        }


}



难点:

   - 如何区分正负号与加号和减号?

   -  +和 - 在表达式的第一个位置

   - 括号后的 + 和-

   -  运算符后的 + 和 -


   四则运算表达式的计算分三个步骤

- 数字和符号分离

 - 中缀表达式转后缀表达式

- 根据后缀表达式计算结果



原创粉丝点击