·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> php网站开发 >> PHP -- four arithmetic operation

PHP -- four arithmetic operation

作者:佚名      php网站开发编辑:admin      更新时间:2022-07-23
php -- four arithmetic Operation

PHP 生成简单四则运算。

Thanksfor OpenSource.

本代码基于 jiaych php四则运算计算函数 实现。

  1 <?php  2     /*基于jiaych php四则运算计算函数  3     http://download.csdn.net/user/jiaych 实现  4       5     */  6     class randmath  7     {   8           //$num 数字个数,$nsize 数字位数  9           public function creatmath($num, $nsize) 10           {  11                 $str_num = rand(0, pow(10,$nsize)); 12                 for ($i = 1; $i < $num; $i++) { 13                 $str_t=rand(0, pow(10,$nsize));  14                    15                      $str_num = $this->rand_num($str_num, rand(0, pow(10,$nsize))); 16   17                 } 18                 return $str_num; 19           } 20           //生成四则运算符号 21          function rand_num($str1, $str2) 22           {  23                $s_num = rand(1, 4); 24                 $str=""; 25                 switch ($s_num) { 26                       case 1: //+ 27                             $str= $str1 . "+" . $str2; 28                             break; 29                       case 2: //- 30                             $str= $str1 . "-" . $str2; 31                             break; 32                       case 3: //* 33                             $str= $str1 . "*" . $str2; 34                             break; 35                       case 4: // / 36                             $str= $str1 . "/" . $str2; 37                             break;  38                             /* case 5: //() 39                             echo "</br>" . $s_num; 40                             return $str1."+".$str2; 41                             break; */ 42                 } 43                 return $str;  44           } 45     } 46     class math_rpn { 47      48     function exp2rpn($exPRession){ 49  50         $_stack  = array('#'); 51         $_rpnexp = array(); 52         $_operator = array('(', '+', '-', '*', '/', ')'); 53         $_priority = array('#' => 0, '(' => 10, '+' => 20, '-' => 20, '*' => 30, '/' => 30); 54         $data=''; 55         $len = strlen($expression); 56          57         for($i = 0; $i < $len; $i++) { 58             $char = substr($expression, $i, 1); 59              60             if ($char == '(') { 61                 $_stack[] = $char; 62                 continue; 63             } else if ( ! in_array($char, $_operator)) { 64                 $data.=$char; 65                 if($i+1<$len) 66                 { 67                     $next = substr($expression, $i+1, 1); 68                     if(in_array($next, $_operator)||is_null($next)) 69                     { 70                         $_rpnexp[] = $data; 71                         $data=null; 72                     } 73                 } 74                 else 75                 { 76                     $_rpnexp[] = $data; 77                     $data=null; 78                 } 79                 continue; 80             } else if ($char == ')') { 81                 for($j = count($_stack); $j >= 0; $j--) { 82                     $tmp = array_pop($_stack); 83                     if ($tmp == "(") { 84                         break;     85                     } else { 86                         $_rpnexp[] = $tmp; 87                     } 88                 } 89                 continue; 90             } else if ($_priority[$char] <= $_priority[end($_stack)]) { 91                 $_rpnexp[] = array_pop($_stack); 92                 $_stack[]  = $char; 93                 continue; 94             } else { 95                 $_stack[] = $char; 96                 continue; 97             } 98         } 99         100         for($i = count($_stack); $i >= 0; $i--) {101             if (end($_stack) == '#') break;102             $_rpnexp[] = array_pop($_stack);103         }104         $mystack=array();    105         foreach($_rpnexp as $ret)106         {107             if($ret=="+")108             {109                 $tmp_a=array_pop($mystack);    110                 $tmp_b=array_pop($mystack);    111                 $mystack[]=$tmp_a+$tmp_b;112             }113             else if($ret=="-")114             {115                 $tmp_a=array_pop($mystack);    116                 $tmp_b=array_pop($mystack);    117                 $mystack[]=$tmp_b-$tmp_a;118             }119             else if($ret=="*")120             {121                 $tmp_a=array_pop($mystack);    122                 $tmp_b=array_pop($mystack);    123                 $mystack[]=$tmp_b*$tmp_a;124             }125             else if($ret=="/")126             {127                 $tmp_a=array_pop($mystack);    128                 $tmp_b=array_pop($mystack);    129                 $mystack[]=$tmp_b/$tmp_a;130             }131             else132             {133                 $mystack[]=$ret;134             }135         }136         return $mystack[0];    137     }138 }//测试实例139 /*$expression = "(10.1+3)*(15)-1.4+5";140 echo $expression."="; 141 $mathrpn = new math_rpn();142 echo $mathrpn->exp2rpn($expression)."</br>";143 */144   //  $rand_math = new randmath(); 145   //  echo $rand_math->creatmath(4, 2);146 ?>
randmath.php
 1  <?php 2     header("Content-type: text/html; charset=utf-8"); 3     include("randmath.php"); 4   5     $mathrpn = new math_rpn(); 6     $rand_math  = new randmath();//生成随机式子 7   8     $i=10; 9     while($i>0)10     {11         $rand_formula = $rand_math->creatmath(4, 1);//生成随机式子方法($num 数字个数,$nsize 数字位数)12         $math_result=$mathrpn->exp2rpn($rand_formula);13         if(is_int($math_result)&$math_result>0)14         {15             $i--;16             echo $rand_formula . "=" . $math_result."</br>";17         }          18     }19 ?> 
ShowRPN.php

这样就能生成简单四则运算了。