利用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 相关文章推荐
桌面中心(一)创建数据库
Oct 09 PHP
如何设置mysql允许外网访问
Jun 04 PHP
php异常处理使用示例
Feb 25 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
Nov 30 PHP
简单概括PHP的字符串中单引号与双引号的区别
May 07 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
Yii框架实现的验证码、登录及退出功能示例
May 20 PHP
PHP实现的策略模式简单示例
Aug 25 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 PHP
PHP 二维array转换json的实例讲解
Aug 21 PHP
laravel 关联关系遍历数组的例子
Oct 10 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
Zend公司全球首推PHP认证
2006/10/09 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
php操作csv文件代码实例汇总
2014/09/22 PHP
一次因composer错误使用引发的问题与解决
2019/03/06 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
VUE重点问题总结
2018/03/19 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
py中的目录与文件判别代码
2008/07/16 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
python如何删除文件、目录
2020/06/23 Python
Python urllib库如何添加headers过程解析
2020/10/05 Python
python 自动识别并连接串口的实现
2021/01/19 Python
Parfume Klik丹麦:香水网上商店
2018/07/10 全球购物
建筑施工员岗位职责
2013/11/26 职场文书
违反校纪校规检讨书
2014/02/15 职场文书
干部选拔任用方案
2014/05/26 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
2016党校培训心得体会
2016/01/07 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
教你快速开启Apache SkyWalking的自监控
2021/04/25 Servers
详解Python中的进程和线程
2021/06/23 Python
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏