前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用PHP实现的四则运算表达式计算

用PHP实现的四则运算表达式计算

作者头像
大江小浪
发布2018-07-25 10:22:59
1K0
发布2018-07-25 10:22:59
举报
文章被收录于专栏:小狼的世界

题目要求:有一个四则运算的字符串表达式,编写一个函数,计算四则运算的结果

PHP实现:

代码语言:javascript
复制
1 <?php
 2 
 3 /**
 4  * 计算四则运算表达式
 5  */
 6 
 7 error_reporting(E_ALL);
 8 
 9 $exp = '(1+2*(3+5)/4)*(3+(5-4)*2)';
10 $arr_exp = array();
11 
12 for($i=0;$i<strlen($exp);$i++){
13     $arr_exp[] = $exp[$i];
14 }
15 $result = calcexp( array_reverse($arr_exp) );
16 echo $exp . '=' . $result;
17 
18 function calcexp( $exp ){
19     $arr_n = array();
20     $arr_op = array();
21     
22     while( ($s = array_pop( $exp )) != '' ){
23         if( $s == '(' ){
24             $temp = array(); $quote = 1; $endquote = 0;
25             while( ($t = array_pop($exp)) != '' ){
26                 if( $t == '(' ){
27                     $quote++;
28                 }
29                 if( $t == ')' ){
30                     $endquote++;
31                     if( $quote == $endquote ){
32                         break;
33                     }
34                 }
35                 array_push($temp, $t);
36             }
37             $temp = array_reverse($temp);
38             array_push($arr_n, calcexp($temp) );
39         }else if( $s == '*' || $s == '/' ){
40             $n2 = array_pop($exp);
41             if( $n2 == '(' ){
42                 $temp = array(); $quote = 1; $endquote = 0;
43                 while( ($t = array_pop($exp)) != '' ){
44                     if( $t == '(' ){
45                         $quote++;
46                     }
47                     if( $t == ')' ){
48                         $endquote++;
49                         if( $quote == $endquote )
50                             break;
51                     }
52                     array_push($temp, $t);
53                 }
54                 $temp = array_reverse($temp);
55                 $n2 = calcexp($temp);
56             }
57             
58             $op = $s;
59             $n1 = array_pop($arr_n);
60             
61             $result = operation($n1, $op, $n2);
62             array_push($arr_n, $result);
63         }elseif( $s == '+' || $s == '-' ){
64             array_push($arr_op, $s);
65         }else{
66             array_push($arr_n, $s);
67         }
68     }
69     
70     $n2 = array_pop($arr_n);
71     while( ($op = array_pop($arr_op)) != '' ){
72         $n1 = array_pop($arr_n);
73         $n2 = operation($n1, $op, $n2);
74     }
75     
76     return $n2;
77 }
78 
79 function operation( $n1, $op, $n2 ){
80     switch ($op) {
81         case '+':
82             return intval($n1) + intval($n2);
83             break;
84         case '-':
85             return intval($n1) - intval($n2);
86             break;
87         case '*':
88             return intval($n1) * intval($n2);
89             break;
90         case '/':
91             return intval($n1) / intval($n2);
92             break;
93     }
94 }

这个实现方式中使用了两个堆栈,一个用来存储数字,一个用来存储运算符,遇到括号以后就递归进入括号内运算,实现方式有点笨拙,后面补充一下“逆波兰表达式”的算法实现。 

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-07-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档