利用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 相关文章推荐
基于mysql的论坛(7)
Oct 09 PHP
Adodb的十个实例(清晰版)
Dec 31 PHP
php数组函数序列之array_flip() 将数组键名与值对调
Nov 07 PHP
php中serialize序列化与json性能测试的示例分析
Apr 27 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
Sep 09 PHP
smarty模板引擎从php中获取数据的方法
Jan 22 PHP
PHP简单字符串过滤方法示例
Sep 04 PHP
PHP实现登陆表单提交CSRF及验证码
Jan 24 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
php实现小程序支付完整版
Oct 09 PHP
PHP Web表单生成器案例分析
Jun 02 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
PHP中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
php 获取本机外网/公网IP的代码
2010/05/09 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
一个仿糯米弹框效果demo
2014/07/22 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
重学JS 系列:聊聊继承(推荐)
2019/04/11 Javascript
JS实现倒序输出的几种常用方法示例
2019/04/13 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
python基础教程之lambda表达式使用方法
2014/02/12 Python
关于pytorch中网络loss传播和参数更新的理解
2019/08/20 Python
Python print不能立即打印的解决方式
2020/02/19 Python
HTML5中的postMessage API基本使用教程
2016/05/20 HTML / CSS
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
JAVA和C++区别都有哪些
2015/03/30 面试题
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
作文批改评语大全
2014/04/23 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
庆国庆国旗下讲话稿2014
2014/09/21 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
介绍信模板
2015/01/31 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
单位同意报考证明
2015/06/17 职场文书
暂住证明怎么写
2015/06/19 职场文书