设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 手机 公司
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在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站长网)

    网友评论
    推荐文章
      热点阅读