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

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】;

          }

        }


}



难点:

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

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

   - 括号后的 + 和-

   -  运算符后的 + 和 -


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

- 数字和符号分离

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

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



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值