在PHP中怎样编写函数来计算四则运算的结果
发布时间:2023-01-31 11:06 所属栏目:121 来源:互联网
导读:这篇主要是介绍PHP中怎样编写函数来计算四则运算的结果的内容了,下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家解决PHP中怎样编写函数来计算四则运算的结果的问题,下面我们一起来了解看看吧。 代
这篇主要是介绍“PHP中怎样编写函数来计算四则运算的结果”的内容了,下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家解决PHP中怎样编写函数来计算四则运算的结果的问题,下面我们一起来了解看看吧。 代码如下: /** * 计算四则运算表达式 */ error_reporting(E_ALL); $exp = '(1+2*(3+5)/4)*(3+(5-4)*2)'; $arr_exp = array(); for($i=0;$i $arr_exp[] = $exp[$i]; } $result = calcexp( array_reverse($arr_exp) ); echo $exp . '=' . $result; function calcexp( $exp ){ $arr_n = array(); $arr_op = array(); while( ($s = array_pop( $exp )) != '' ){ if( $s == '(' ){ $temp = array(); $quote = 1; $endquote = 0; while( ($t = array_pop($exp)) != '' ){ if( $t == '(' ){ $quote++; } if( $t == ')' ){ $endquote++; if( $quote == $endquote ){ break; } } array_push($temp, $t); } $temp = array_reverse($temp); array_push($arr_n, calcexp($temp) ); }else if( $s == '*' || $s == '/' ){ $n2 = array_pop($exp); if( $n2 == '(' ){ $temp = array(); $quote = 1; $endquote = 0; while( ($t = array_pop($exp)) != '' ){ if( $t == '(' ){ $quote++; } if( $t == ')' ){ $endquote++; if( $quote == $endquote ) break; } array_push($temp, $t); } $temp = array_reverse($temp); $n2 = calcexp($temp); } $op = $s; $n1 = array_pop($arr_n); $result = operation($n1, $op, $n2); array_push($arr_n, $result); }elseif( $s == '+' || $s == '-' ){ array_push($arr_op, $s); }else{ array_push($arr_n, $s); } } $n2 = array_pop($arr_n); while( ($op = array_pop($arr_op)) != '' ){ $n1 = array_pop($arr_n); $n2 = operation($n1, $op, $n2); } return $n2; } function operation( $n1, $op, $n2 ){ switch ($op) { case '+': return intval($n1) + intval($n2); break; case '-': return intval($n1) - intval($n2); break; case '*': return intval($n1) * intval($n2); break; case '/': return intval($n1) / intval($n2); break; } } 这个实现方式中使用了两个堆栈,一个用来存储数字,一个用来存储运算符,遇到括号以后就递归进入括号内运算,实现方式有点笨拙,后面补充一下“逆波兰表达式”的算法实现。 (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读