速算口决的php代码验证实例程序

来源:互联网 发布:js array后几个 编辑:程序博客网 时间:2024/05/21 14:42
<html><head><meta http-equiv="content-type" content="text/html";charset="utf-8" /></head><body>1.十几乘十几:<br>口诀:头乘头,尾加尾,尾乘尾。<br>例:12×14=?<br>解: 1×1=1<br>   2+4=6<br>   2×4=8<br>    12×14=168<br>注:个位相乘,不够两位数要用0占位。<br><?php//game_su_cal.php//1,1,2,3,5,8,13,21,.... X(n为第n个数)  已知n,求X的值?  //公式:(n=1,x=1  //      n=2,x=1  //      n>2,x=x(n-1)+x(n-2))  //   采用递归算法  //   //1,1,2,3,5,8,13,21,....X(n)  function GetNumSum($n)  {      $r = 0;      if ($n == 1 || $n==2)      {          $r = 1;                 }              if ($n > 2)      {  $r = GetNumSum($n - 1) + GetNumSum($n - 2);      }                 return $r;  }  /* TODO: Add code here *///两位数乘两位数乘法 速算验证函数function sucal($num1,$num2){$r=0;if(strlen($num1)==1) $num1="0".$num1;if(strlen($num2)==1) $num2="0".$num2;//5.11乘任意数if($num1==11||$num2==11){if($num2==11){   //值交换,以保证第一个值为11$tmp=$num1;$num1=$num2;$num2=$tmp;}//口诀:首尾不动下落,中间之和下拉$len=strlen($num2);if(($len==1)||($len==2 && substr($num2,0,1)==0)){   //这个11x(1~9)就不用口诀了吧!$r=$num1*$num2;}else{$r=substr($num2,0,1);             //首尾不动下落//中间之和下拉for($i=0;$i<$len-1;$i++){$r=$r.''.substr($num2,$i,1)+substr($num2,$i+1,1);}$r=$r.''.substr($num2,$len-1,1); //首尾不动下落}}//1.十几乘十几elseif($num1>=10 && $num1<20 && $num2>=10 && $num2<20){//口诀:头乘头,尾加尾,尾乘尾。$h_mul=substr($num1,0,1)*substr($num2,0,1);  //头乘头$w_add=substr($num1,1,1)+substr($num2,1,1);  //尾加尾$w_mul=substr($num1,1,1)*substr($num2,1,1);  //尾乘尾$sw=0;$bw=0;//对个位数修正 对$w_mul修正if($w_mul>=10){$sw=substr($w_mul,0,1);    //除10取整数$w_mul=substr($w_mul,1,1);  //除10取余数}//对十位数修正 对$w_add修正$w_add=$w_add+$sw;if($w_add>=10){$bw=substr($w_add,0,1);    //除10取整数$w_add=substr($w_add,1,1);  //除10取余数}//对百位数修正 对h_mul修正$h_mul=$h_mul+$bw;//计算的结果进行组合$r=$h_mul.''.$w_add.''.$w_mul;}//6.十几乘任意数elseif($num1>=10 && $num1<20||$num2>=10 && $num2<20){if($num2>=10 && $num2<20){//值交换,以保证第一个值为十几$tmp=$num1;$num1=$num2;$num2=$tmp;}    //6.十几乘任意数 12*21   10x20//口诀:第二乘数首位不动向下落,//第一因数的个位乘以第二因数后面每一个数字,加下一位数,再向下落。//echo "--------口决6---------<br>";$h_1=substr($num1,1,1);           //第一因数的个位$len=strlen($num2)-1;  //echo $len."长度<br>";$jw=0;  //进位数for($i=$len;$i>=0;$i--){$sum=0;if($i==$len){$sum=$h_1*substr($num2,$i,1);  //echo $sum."个位数值<br>";}else{$sum=$h_1*substr($num2,$i,1)+substr($num2,$i+1,1)+$jw;}$jw=0;  //上行已累加进位数,这里该清零if($sum>=10){   //满10进位$jw=substr($sum,0,1);$sum=substr($sum,1,1);}if($i==$len){$r=$sum;}else{$r=$sum.''.$r;}}$r=substr($num2,0,1)+$jw.''.$r;         //首尾不动下落//echo "-----------------<br>";}//4.几十一乘几十一elseif(substr($num1,1,1)==1 && substr($num2,1,1)==1) {//口诀:头乘头,头加头,尾乘尾。$h_mul=substr($num1,0,1)*substr($num2,0,1);  //头乘头$h_add=substr($num1,0,1)+substr($num2,0,1);  //头加头$w_mul=substr($num1,1,1)*substr($num2,1,1);  //尾乘尾$sw=0;$bw=0;//对个位数修正if($w_mul>=10){$sw=substr($w_mul,0,1);$w_mul=substr($w_mul,1,1);}//对十位数修正$h_add=$h_add+$sw; if($h_add>=10){$bw=substr($h_add,0,1);$h_add=substr($h_add,1,1);}//对百位数修正$h_mul=$h_mul+$bw;//组合计算结果值$r=$h_mul.''.$h_add.''.$w_mul;}//3.第一个乘数互补,另一个乘数数字相同elseif((substr($num1,0,1)+substr($num1,1,1))==10 && substr($num2,0,1)==substr($num2,1,1)||  (substr($num2,0,1)+substr($num2,1,1))==10 && substr($num1,0,1)==substr($num1,1,1)){if((substr($num2,0,1)+substr($num2,1,1))==10 && substr($num1,0,1)==substr($num1,1,1)){//交换$num1和$num2的值,以保证第一个乘数互补$tmp=$num1;$num1=$num2;$num2=$tmp;}//口诀:一个头加1后,头乘头,尾乘尾$h_add_1=substr($num1,0,1)+1;                 //一个头加1后$h_mul=$h_add_1*substr($num2,0,1);           //头乘头$w_mul=substr($num1,1,1)*substr($num2,1,1);  //尾乘尾//对个位数修正if(strlen($w_mul)==1) $w_mul="0".$w_mul;     //个位相乘,不足两位要补0//计算的结果进行组合$r=$h_mul.''.$w_mul;}//2.头相同,尾互补(尾相加等于10)elseif(substr($num1,0,1)==substr($num2,0,1) &&(substr($num1,1,1)+substr($num2,1,1))==10){//口诀:一个头加1后,头乘头,尾乘尾。$h_add_1=substr($num1,0,1)+1;                 //一个头加1后$h_mul=$h_add_1*substr($num2,0,1);           //头乘头$w_mul=substr($num1,1,1)*substr($num2,1,1);  //尾乘尾//对个位数修正if(strlen($w_mul)==1) $w_mul="0".$w_mul;     //个位相乘,不足两位要补0//计算的结果进行组合$r=$h_mul.''.$w_mul;}else{   //一般计算机乘法//$r=$num1*$num2;}return $r; //$r即为计算结果值}//下面来看看10到20以内的数计算情况echo "输出格式:一个数x另一个数=计算机值=速算值<br>";for($i=10;$i<20;$i++){for($j=10;$j<20;$j++){$sval=$i*$j;$calval=sucal($i,$j);echo $i.'x'.$j.'='.$sval.'='.$calval;if($calval!=$sval) echo 'X';echo '<br>';}}//echo '12x14='.(12*14).'='.sucal(12,14);echo '<br>';//echo '16x19='.(16*19).'='.sucal(16,19);echo '<br>';?>2.头相同,尾互补(尾相加等于10):<br>口诀:一个头加1后,头乘头,尾乘尾。<br>例:23×27=?<br>解:2+1=3<br>  2×3=6<br>  3×7=21<br>    23×27=621<br>注:个位相乘,不够两位数要用0占位。<br><?phpfor($i=10;$i<100;$i++){for($j=10;$j<100;$j++){if(substr($i,0,1)==substr($j,0,1) && (substr($i,1,1)+substr($j,1,1)==10)){$sval=$i*$j;$calval=sucal($i,$j);echo $i.'x'.$j.'='.$sval.'='.$calval;if($calval!=$sval) echo 'X';echo '<br>';}}}?>3.第一个乘数互补,另一个乘数数字相同:<br>口诀:一个头加1后,头乘头,尾乘尾。<br>例:37×44=?<br>解:3+1=4<br>    4×4=16<br>    7×4=28<br>     37×44=1628<br>注:个位相乘,不够两位数要用0占位。<br><?phpfor($i=10;$i<100;$i++){for($j=10;$j<100;$j++){if((substr($i,0,1)+substr($i,1,1))==10 && substr($j,0,1)==substr($j,1,1)||(substr($j,0,1)+substr($j,1,1))==10 && substr($i,0,1)==substr($i,1,1)){$sval=$i*$j;$calval=sucal($i,$j);echo $i.'x'.$j.'='.$sval.'='.$calval;if($calval!=$sval) echo 'X';echo '<br>';}}}?>4.几十一乘几十一:<br>口诀:头乘头,头加头,尾乘尾。<br>例:21×41=?<br>解:2×4=8<br>    2+4=6<br>    1×1=1<br>    21×41=861<br><?phpfor($i=10;$i<100;$i++){for($j=10;$j<100;$j++){if(substr($i,1,1)==1 && substr($j,1,1)==1) {$sval=$i*$j;$calval=sucal($i,$j);echo $i.'x'.$j.'='.$sval.'='.$calval;if($calval!=$sval) echo 'X';echo '<br>';}}}?>5.11乘任意数:<br>口诀:首尾不动下落,中间之和下拉。<br>例:11×23125=?<br>解:2+3=5<br>    3+1=4<br>    1+2=3<br>    2+5=7<br>    2和5分别在首尾<br>     11×23125=254375<br>     注:和满十要进一。<br><?php$i=11;for($j=10;$j<=100;$j++){if($i==11||$j==11){$sval=$i*$j;$calval=sucal($i,$j);echo $i.'x'.$j.'='.$sval.'='.$calval;if($calval!=$sval) echo 'X';echo '<br>';}}?>6.十几乘任意数:<br>口诀:第二乘数首位不动向下落,第一因数的个位乘以第二因数后面每一个数字,<br>加下一位数,再向下落。<br>例:13×326=?<br>解:13个位是3<br>    3×3+2=11<br>    3×2+6=12<br>    3×6=18<br>     13×326=4238<br>       注:和满十要进一。<br> <?phpfor($i=10;$i<20;$i++){for($j=10;$j<=100;$j++){$sval=$i*$j;$calval=sucal($i,$j);echo $i.'x'.$j.'='.$sval.'='.$calval;if($calval!=$sval) echo 'X';echo '<br>';}}?></body></html>

原创粉丝点击