>  기사  >  백엔드 개발  >  PHP에서 네 가지 산술 연산을 구현하는 방법

PHP에서 네 가지 산술 연산을 구현하는 방법

藏色散人
藏色散人원래의
2021-03-12 09:41:083864검색

PHP에서 네 가지 산술 연산을 구현하는 방법: 먼저 PHP 샘플 파일을 만든 다음 숫자 스택과 기호 스택을 선언한 다음 연산 문자열을 $arr 배열로 분해합니다. , &$ op_arr){}" 및 기타 메서드를 사용하여 4가지 산술 연산을 구현할 수 있습니다.

PHP에서 네 가지 산술 연산을 구현하는 방법

이 기사의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

php는 간단한 4개의 산술 계산기를 구현합니다(괄호의 우선순위는 아직 지원되지 않습니다). 표현식을 평가하기 위해 스택과 같은 데이터 구조를 사용하는 것이 좋습니다.

여기서 스택 구조를 사용할 수 있습니다. PHP의 배열은 "자연스럽게" 스택 특성을 가지므로 여기서는 배열을 직접 사용합니다. 물론 스택 구조를 사용하여 작성할 수도 있지만 원리는 동일합니다.

선배(폴란드 과학자)는 역폴란드 알고리즘(접미사 표현 방법)을 사용하여 괄호가 있는 4개의 표현식을 계산하고 있습니다. 정말 놀랍습니다! ! 사실 코딩은 어렵지 않습니다. 어려운 것은 알고리즘의 안내입니다. 코딩을 하기 전에 먼저 알고리즘을 이해해야 합니다.

<?php
$num_arr = array();// 声明数字栈
$op_arr = array();// 声明符号栈
$str = "10+6*2-18/2-2";
preg_match_all(&#39;/./&#39;, $str, $arr);// 把运算串分解成每个字符到$arr数组
$str_arr = $arr[0];
$length = count($str_arr);
$pre_num = &#39;&#39;;
// 开始入栈
for($i=0; $i<$length; $i++){
  $val = $str_arr[$i];
  // 数字
  if (is_numeric($val)){
    $pre_num .= $val;// 兼顾下一个字符可能也是数字的情况(多位数)
    if($i+1>=$length || isOper($str_arr[$i+1])){// 下一个是运算符或者到头了,则把数字塞进数字栈
      array_push($num_arr, $pre_num);
      $pre_num = &#39;&#39;;
    }
  // 符号判断优先级,选择是否入栈
  } else if (isOper($val)){
    if (count($op_arr)>0){
      // 判断优先级,只要不大于符号栈顶的优先级,就开始计算,直到优先级大于了栈顶的,计算后才再把这个运算符入栈
      while (end($op_arr) && priority($val) <= priority(end($op_arr))){
        calc($num_arr, $op_arr);
      }
    }
    array_push($op_arr, $val);
  }
}
//echo &#39;<pre class="brush:php;toolbar:false">&#39;;
//print_r($num_arr);
//print_r($op_arr);
// 计算栈里剩余的
while(count($num_arr)>0){
  calc($num_arr, $op_arr);
  if (count($num_arr)==1){
    $result = array_pop($num_arr);
    break;
  }
}
echo $str,&#39; = &#39;, $result;
// 计算,获取数字栈的两个数,符号栈顶的运算符
function calc(&$num_arr, &$op_arr){
  if (count($num_arr)>0){
    $num1 = array_pop($num_arr);
    $num2 = array_pop($num_arr);
    $op = array_pop($op_arr);
    if ($op==&#39;*&#39;) $re = $num1*$num2;
    if ($op==&#39;/&#39;) $re = $num2/$num1;// 这里注意顺序,栈是先进后出,所以$num2是被除数
    if ($op==&#39;+&#39;) $re = $num2+$num1;
    if ($op==&#39;-&#39;) $re = $num2-$num1;
    array_push($num_arr, $re);
  }
}
// 获取优先级
function priority($str){
  if ($str == &#39;*&#39; || $str == &#39;/&#39;){
    return 1;
  } else {
    return 0;
  }
}
// 判断是否是运算符
function isOper($oper){
  $oper_array = array(&#39;+&#39;,&#39;-&#39;,&#39;*&#39;,&#39;/&#39;);
  if (in_array($oper, $oper_array)){
    return true;
  }
  return false;
}

실행 결과:

10+6*2-18/2-2 = 11

[추천 학습: "PHP Video Tutorial"]

위 내용은 PHP에서 네 가지 산술 연산을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.