zoukankan      html  css  js  c++  java
  • PHP four arithmetic operation

    PHP 生成 简单四则运算。

    Thanks for Open Source.

    本代码基于 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             else
    132             {
    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

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

  • 相关阅读:
    搞笑的口误 [调剂一下生活 :D]
    Win 2003远程管理的实现
    asp.net 实现购物车(DataSet)详细代码[转]
    SQL Server:定时作业的设置方法
    URL Rewrite
    Asp.net 2.0 C#实现压缩/解压功能 [转=向作者‘肖相’无私共享精神致敬]
    网站的赢利模式 从只看排名流量中解脱出来[转]
    一些.net的工具[转]
    Expression孟岩
    sql作业,执行表间数据导入的实验
  • 原文地址:https://www.cnblogs.com/MicroHao/p/3606553.html
Copyright © 2011-2022 走看看