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
这样就能生成简单四则运算了。