设为首页 收藏本站
查看: 910|回复: 0

[经验分享] 使用PHP实现水仙花数及各种特殊有趣数的输出

[复制链接]

尚未签到

发表于 2018-12-14 06:16:41 | 显示全部楼层 |阅读模式
  尊敬的读者,见文好。
  

  本文包含以下内容:
  1,为什么要写这篇文章!
  2,具体的方案及代码实现!
  3,你可能遇到的问题!
  4,文末本文测试用源码网盘地址!

  
  特殊说明:
  本文使用的语言是PHP;
  本文运行的环境是:Apache2.4, PHP5.6
  
  第一部分:为什么要写这篇文章!
  因为经常会有人问到如何输出“水仙花数”,经查阅百度百科,不仅仅有“水仙花数”,还有很多有意思的数字!尝试写出了可以生成这些有趣数字的一个函数!有两种思路!
  注:经过压测,第一种思路的执行效率要高于第二种!可见对于数据的处理效率要远远高于对于文字的处理的!

  

  第二部分:具体的方案及代码实现!
  第一种方案:
  使用求余数加上php中的地板函数floor()来获取数字的每一位并进行数学运算!

/**
     * @author Lizisir
     * 可以计算数字中具有特殊含义的数字
     * @param  int $number 数字的位数
     * @return null
     */
    function specialNumber( $number )
    {
        $numberNameList = [
                '独身数',
                '没有',
                '水仙花数',
                '四叶玫瑰数',
                '五角星数',
                '六合数',
                '北斗七星数',
                '八仙数',
                '九九重阳数',
                '十全十美数'
            ];
        // 输出对应的特殊数字的名称 例如:水仙花数
        echo $numberNameList[ $number-1 ].":";
        $start = pow( 10, $number-1 ) + 1;
        $end = pow( 10, $number );
        for ( $i = $start; $i < $end; ++ $i )
        {
            // 接受数字每位的n次幂的和
            $sum = 0;
            // 目标数字
            $aimNumber = $i;   
            // 计算数字每位的n次幂的和
            while( $aimNumber != 0 )
            {
                // 获取每一位的数字
                $wei = $aimNumber % 10;  
                // 计算每一位的n次幂并加到和上面
                $sum += pow( $wei, $number );
                // 去掉末尾数字
                $aimNumber = floor( $aimNumber / 10 );  
            }
            if( $i == $sum )
            {
                echo $i;
                echo "";
            }
        }
    }  

  第二种方案:
  利用PHP中可以把字符串当数组处理的好处,先把数据转化成字符串,利用下标直接取出每一位 并进行运算!
/**
     * @author Lizisir
     * 可以计算数字中具有特殊含义的数字
     * @param  int $number 数字的位数
     * @return null
     */
    function specialNumber( $number )
    {
        $numberNameList = [
                '独身数',
                '没有',
                '水仙花数',
                '四叶玫瑰数',
                '五角星数',
                '六合数',
                '北斗七星数',
                '八仙数',
                '九九重阳数',
                '十全十美数'
            ];
        // 输出对应的特殊数字的名称 例如:水仙花数
        echo $numberNameList[ $number-1 ].":";
        $start = pow( 10, $number-1 ) + 1;
        $end = pow( 10, $number );
        for ( $i = $start; $i < $end; ++ $i )
        {
            // 接受数字每位的n次幂的和
            $sum = 0;   
            // 计算数字每位的n次幂的和
            $i = (string)$i;
            for($key=0; $key

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-651042-1-1.html 上篇帖子: PHP图片上传功能实现 下篇帖子: (随记)php高并发
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表