设为首页 收藏本站
查看: 788|回复: 0

[经验分享] PHP

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-26 13:40:12 | 显示全部楼层 |阅读模式
  PHP 生成 简单四则运算。
  Thanks for Open Source.
  本代码基于 jiaych php四则运算计算函数 实现。


DSC0000.gif DSC0001.gif


  1 <?php
  2     /*基于jiaych php四则运算计算函数
  3     http://download.iyunv.com/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  这样就能生成简单四则运算了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-104512-1-1.html 上篇帖子: PHP 抓取网页图片并且另存为 下篇帖子: 使用VisualStudio开发php
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表