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

描述

有这样一道题,给出一个数字串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)

总结

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

(0)

相关推荐

  • php用正则判断是否为数字的方法

    前两天朋友的一个网站上有人利用php注入提交flash游戏分数,后来找原因才发现是有一位参数没有做数字判断导致. 本来保存游戏分数是 game.php?ac=save&fgid=1这个形式来实现,在php网页里面fgid直接调用,没有做任何的过滤.很多人利用在fgid=1后面加一个字母(fgid=1a),来实现一些非法操作. 假如  gamlist table 里面有一个游戏  fgid为102 select gname from gamelist where fgid='102′; selec

  • php中数字、字符与对象判断函数用法实例

    本文实例讲述了php中数字.字符与对象判断函数用法.分享给大家供大家参考.具体分析如下: 在php判断数字,字符,对象,数组等包括有参见 is_bool().is_int().is_integer().is_float().is_real().is_object() 和 is_array()这些函数了,不知道你知道多少呢. 1. 双精度数判断:is_double is_double -- is_float() 的别名 描述:此函数是 is_float() 的别名函数,代码如下: 复制代码 代码如

  • PHP的几个常用数字判断函数代码

    复制代码 代码如下: <HTML> <HEAD> <TITLE>常用的数值判断函数</TITLE> </HEAD> <BODY> <? //判断数组 $colors = array("red", "blue", "green"); if(is_array($colors)) { print("colors is an array"."<

  • php 判断是否是中文/英文/数字示例代码

    复制代码 代码如下: $str='asb天水市12'; if (preg_match("/^[\x7f-\xff]+$/", $str)){ echo '全部是汉字'; }else { echo '不全是汉字'; } /** PHP自带的判断是否是中文, eregi('[^\x00-\x7F]', $str ) //中文 eregi('[0-9]', $str) //数字 eregi('[a-zA-Z]', $str)//英文 */ if (eregi('[^\x00-\x7F]',

  • php判断输入是否是纯数字,英文,汉字的方法

    本文实例讲述了php判断输入是否是纯数字,英文,汉字的方法.分享给大家供大家参考.具体分析如下: 这里利用php的mb_strlen和strlen函数就可以轻松得知字符串的构成是全英文.英汉混合.还是纯汉字.简要说明如下: 1.如果strlen返回的字符长度和mb_strlen以当前编码计算的长度一 致,可以判断是纯英文字符串. 2.如果strlen返回的字符长度和mb_strlen以当前编码计算的长度不一致, 且strlen返回值同mb_strlen的返回值求余后得0可以判断为是全汉字的字符串

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

    描述 有这样一道题,给出一个数字串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×

  • 利用JS判断字符串是否含有数字与特殊字符的方法小结

    前言 本文主要介绍的是利用JS判断字符串是否含有数字与特殊字符的方法,文中有几种不同的方法,包括普通的JS验证法.正则表达式法,另外还有判断是否为浮点数的js函数,在最后还将简要介绍下isNAN函数的使用方法和例子,来一起学习学习吧. 一.正则表达式方法判断是否为数字,包括判断正整数: function checkRate(input) { var re = /^[0-9]+.?[0-9]*$/; //判断字符串是否为数字,//若判断正整数,则后边是:/^[1-9]+[0-9]*]*$/ if

  • 利用java+mysql递归实现拼接树形JSON列表的方法示例

    前言 本文给大家介绍的是关于利用java+mysql递归实现拼接树形JSON列表的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍: 我们在做Java web项目时,前端控件例如国家-省-市-区-县等树形列表,常常需要多级树形json数据 例如: [ { "name": "商品目录", "pid": "-1", "id": "1", "children"

  • JS判断两个对象内容是否相等的方法示例

    本文实例讲述了JS判断两个对象内容是否相等的方法.分享给大家供大家参考,具体如下: 我们知道,如果两个对象即使内容,JavaScript也会判断它们不相等.但是有时候,我们仅仅需要判断两个对象的内容是否相等.那么我们应该如何做到且考虑周全呢?比如说0和-0,null和undefined,是不相等的,NaN和NaN默认是不相等的.我写了一个isEqual方法,考虑到了诸多方面,代码如下: <!DOCTYPE html> <html> <head> <meta cha

  • Android编程判断当前应用是否在后台运行的方法示例

    本文实例讲述了Android编程判断当前应用是否在后台运行的方法.分享给大家供大家参考,具体如下: /** 判断程序是否在后台运行 */ public static boolean isRunBackground(Context context) { ActivityManager activityManager = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); List<RunningAppProc

  • jQuery简单判断值是否存在于数组中的方法示例

    本文实例讲述了jQuery简单判断值是否存在于数组中的方法.分享给大家供大家参考,具体如下: <!DOCTYPE> <html> <head> <title>jquery判断值是否存在于数组中</title> <meta charset="utf-8"> </head> <body> <script src="http://libs.baidu.com/jquery/2.0.

  • 利用MySQL统计一列中不同值的数量方法示例

    前言 本文实现的这个需求其实十分普遍,举例来说,我们存在一个用户来源表,用来标记用户从哪个渠道注册进来.表结构如下所示- 其中 origin 是用户来源,其中的值有 iPhone .Android .Web 三种,现在需要分别统计由这三种渠道注册的用户数量. 解决方案1 SELECT count(*) FROM user_operation_log WHERE origin = 'iPhone'; SELECT count(*) FROM user_operation_log WHERE ori

  • 利用Spring Social轻松搞定微信授权登录的方法示例

    微信第三方登录有两种方式:扫码登录(微信开放平台)和公众号登录(微信公众平台) 扫码登录可以用于PC等跨平台应用,而公众平台必须在微信app内使用,且必须关注公众号. 下面以公众平台为例,介绍如何基于Spring Social实现微信用户授权并获取到用户信息.(微信开放平台类似) 第一步:到微信公众平台后台注册应用并进行相关设置 微信公众平台后台地址: https://mp.weixin.qq.com/ 也可以先注册一个测试号: https://mp.weixin.qq.com/debug/cg

  • sql server利用不同语种语言显示报错错误消息的方法示例

    问题: 生产环境的操作系统和数据库可能是英文版的,而我们的母语是中文,如果英语能力差点,可能有时对英语环境下的数据库脚本报错的英文提示看不懂,如果直接拿英语错误提示通过翻译工具去翻译,也不一定就是完全翻译得100%准确. 解决方案: 通过set language指定语种语言,使sql server的报错以该语种语言的形式呈现. 脚本: /* 说明:通过set language指定语种语言,使sql server的报错以该语种语言的形式呈现 脚本来源:https://www.cnblogs.com

  • PHP利用正则表达式将相对路径转成绝对路径的方法示例

    前言 大家应该都有所体会,很多时候在做网络爬虫的时候特别需要将爬虫搜索到的超链接进行处理,统一都改成绝对路径的,所以本文就写了一个正则表达式来对搜索到的链接进行处理.下面话不多说,来看看详细的介绍吧. 通常我们可能会搜索到如下的链接: <!-- 空超链接 --> <a href=""></a> <!-- 空白符 --> <a href=" " rel="external nofollow" &

随机推荐