利用PHP判断是否是连乘数字串的方法示例


Posted in PHP onJuly 03, 2017

描述

有这样一道题,给出一个数字串A,需要判断A是否为连乘数字串,连乘数字串的定义就是一个数字串可以拆分成若干个数字,后面的数字(从第N个数字开始)为前面2个数字的乘积。

举例

(1) '122' --- 可以拆成[1|2|2]

结果: 1×2=2  (连乘数字串)

(2) '1122242' --- 可以拆成[11|22|242]

结果:  11×22=242   (连乘数字串)

(3) '1224832256' --- 可以拆成 [1|2|2|4|8|32|256]

结果: 1×2=2,2×2=4,2×4=8,4×8=32,8×32=256 (连乘数字串)

(4) '234547898185239692' --- 可以拆成 [23454|7898|185239692]

结果:23454×7898=185239692 (连乘数字串)

(5) '113' 可以拆成 [1|1|3]

结果:1×1 != 3  (非连乘数字串)

代码

/**
 * 判断是否连乘数字串函数
* @param $strNum
 * @return bool
 **/
function isExec($strNum) {
 $str = (string)$strNum;

 for ($i = 0; $i < strlen($str); $i++) {
  $k = 1;

  for ($j = $i + 1; $j < strlen($str); $j++) {

   $a_i = 0;
   $b_i = $i + 1;
   $p_i = $i + 1;
   $m_i = $k++;
   $c_i = $b_i + $m_i;
   $res = false;
   $formula = [];

   while (1) {
    $a = substr($str, $a_i, $p_i);
    $b = substr($str, $b_i, $m_i);

    $n = $a * $b;

    $c = substr($str, $c_i, strlen($n));

    //echo '<br/>' . $a . '*' . $b . '=' . $n . '->' . $c . '<br/>';

    if($c){
     $formula[] = $a . '*' . $b . '=' . $n;
    }

    if ($c === false || $c === "") {
     break;
    }

    if (intval($n) == intval($c)) {
     $p_i = strlen($b);
     $m_i = strlen($n);
     $a_i = $b_i;
     $b_i = $c_i;
     $c_i = $b_i + $m_i;
     $res = true;
    } else {
     $res = false;
     break;
    }
   }

   if ($res === true) {
    print_r($formula);
    return true;
   }

   //var_dump($res) . '<br/>';
  }

 }

 return false;
}

执行

var_dump(isExec('1224832256'));

//运行结果
Array
[
   [0] => 1*2=2
   [1] => 2*2=4
   [2] => 2*4=8
   [3] => 4*8=32
   [4] => 8*32=256
]
bool(true)

var_dump(isExec('234547898185239692'));

//运行结果
Array
[
   [0] => 23454*7898=185239692
]
bool(true)

var_dump(isExec('1122242'));

//运行结果
Array
[
   [0] => 11*22=242
]
bool(true)

var_dump(isExec('11234'));

//运行结果
bool(false)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php算开始时间到过期时间的相隔的天数
Jan 12 PHP
php设计模式 Facade(外观模式)
Jun 26 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
Oct 29 PHP
PHP转换文件夹下所有文件编码的实现代码
Jun 06 PHP
PHP获取php,mysql,apche的版本信息示例代码
Jan 16 PHP
php连接oracle数据库及查询数据的方法
Dec 29 PHP
PHP中使用imagick实现把PDF转成图片
Jan 26 PHP
Codeigniter的dom类用法实例
Jun 26 PHP
php关键字仅替换一次的实现函数
Oct 29 PHP
PHP7新特性foreach 修改示例介绍
Aug 26 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
May 31 PHP
php的单例模式及应用场景详解
Feb 27 PHP
使用Zttp简化Guzzle 调用
Jul 02 #PHP
详解php几行代码实现CSV格式文件输出
Jul 01 #PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 #PHP
详解如何在云服务器上部署Laravel
Jun 30 #PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 #PHP
ThinkPHP实现登录退出功能
Jun 29 #PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 #PHP
You might like
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
PHP中的命名空间相关概念浅析
2015/01/22 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
Angular实现form自动布局
2016/01/28 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
DIV+CSS+jQ实现省市联动可扩展
2016/06/22 Javascript
javascript之IE版本检测超简单方法
2016/08/20 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
vuex页面刷新后数据丢失的方法
2019/01/17 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
在Python中使用pngquant压缩png图片的教程
2015/04/09 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
flask框架json数据的拿取和返回操作示例
2019/11/28 Python
社区科普工作方案
2014/06/03 职场文书
学校与家长安全责任书
2014/07/23 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
婚礼答谢词
2015/01/04 职场文书
2015年个人思想总结
2015/03/09 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
党员证明信
2015/06/19 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python
详解redis在微服务领域的贡献
2021/10/16 Redis