溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用PHP實現(xiàn)水仙花數(shù)及各種特殊有趣數(shù)的輸出

發(fā)布時間:2020-07-05 08:43:18 來源:網(wǎng)絡(luò) 閱讀:1825 作者:lizisir 欄目:web開發(fā)

尊敬的讀者,見文好。


本文包含以下內(nèi)容:

1,為什么要寫這篇文章!

2,具體的方案及代碼實現(xiàn)!

3,你可能遇到的問題!

4,文末本文測試用源碼網(wǎng)盤地址!


特殊說明:

本文使用的語言是PHP;

本文運行的環(huán)境是:Apache2.4, PHP5.6 。


第一部分:為什么要寫這篇文章!

因為經(jīng)常會有人問到如何輸出“水仙花數(shù)”,經(jīng)查閱百度百科,不僅僅有“水仙花數(shù)”,還有很多有意思的數(shù)字!嘗試寫出了可以生成這些有趣數(shù)字的一個函數(shù)!有兩種思路!

注:經(jīng)過壓測,第一種思路的執(zhí)行效率要高于第二種!可見對于數(shù)據(jù)的處理效率要遠(yuǎn)遠(yuǎn)高于對于文字的處理的!


第二部分:具體的方案及代碼實現(xiàn)!

第一種方案:

使用求余數(shù)加上php中的地板函數(shù)floor()來獲取數(shù)字的每一位并進行數(shù)學(xué)運算!

/**
     * @author Lizisir <962310113@qq.com>
     * 可以計算數(shù)字中具有特殊含義的數(shù)字
     * @param  int $number 數(shù)字的位數(shù)
     * @return null
     */
    function specialNumber( $number )
    {
        $numberNameList = [
                '獨身數(shù)',
                '沒有',
                '水仙花數(shù)',
                '四葉玫瑰數(shù)',
                '五角星數(shù)',
                '六合數(shù)',
                '北斗×××數(shù)',
                '八仙數(shù)',
                '九九重陽數(shù)',
                '十全十美數(shù)'
            ];
        // 輸出對應(yīng)的特殊數(shù)字的名稱 例如:水仙花數(shù)
        echo $numberNameList[ $number-1 ].":<br>";

        $start = pow( 10, $number-1 ) + 1;
        $end = pow( 10, $number );

        for ( $i = $start; $i < $end; ++ $i ) 
        { 
            // 接受數(shù)字每位的n次冪的和
            $sum = 0;
            
            // 目標(biāo)數(shù)字
            $aimNumber = $i;    

            // 計算數(shù)字每位的n次冪的和
            while( $aimNumber != 0 )
            {
                // 獲取每一位的數(shù)字
                $wei = $aimNumber % 10;  
                // 計算每一位的n次冪并加到和上面
                $sum += pow( $wei, $number );
                // 去掉末尾數(shù)字
                $aimNumber = floor( $aimNumber / 10 );  
            }

            if( $i == $sum )
            {
                echo $i;
                echo "<br>";
            }
        }
    }


第二種方案:

利用PHP中可以把字符串當(dāng)數(shù)組處理的好處,先把數(shù)據(jù)轉(zhuǎn)化成字符串,利用下標(biāo)直接取出每一位 并進行運算!

/**
     * @author Lizisir <962310113@qq.com>
     * 可以計算數(shù)字中具有特殊含義的數(shù)字
     * @param  int $number 數(shù)字的位數(shù)
     * @return null
     */
    function specialNumber( $number )
    {
        $numberNameList = [
                '獨身數(shù)',
                '沒有',
                '水仙花數(shù)',
                '四葉玫瑰數(shù)',
                '五角星數(shù)',
                '六合數(shù)',
                '北斗×××數(shù)',
                '八仙數(shù)',
                '九九重陽數(shù)',
                '十全十美數(shù)'
            ];
        // 輸出對應(yīng)的特殊數(shù)字的名稱 例如:水仙花數(shù)
        echo $numberNameList[ $number-1 ].":<br>";

        $start = pow( 10, $number-1 ) + 1;
        $end = pow( 10, $number );

        for ( $i = $start; $i < $end; ++ $i ) 
        { 
            // 接受數(shù)字每位的n次冪的和
            $sum = 0;    

            // 計算數(shù)字每位的n次冪的和
            $i = (string)$i;
            for($key=0; $key<$number; ++$key)
            {
                // 獲取每一位的數(shù)字
                $wei = $i[$key];  
                // 計算每一位的n次冪并加到和上面
                $sum += pow( $wei, $number );  
            }
            
            if( $i == $sum )
            {
                echo $i;
                echo "<br>";
            }
        }
    }


第三部分:你可能會遇到的問題!

在代碼測試時,你可能會遇到報錯:

Fatal error:  Maximum execution time of 30 seconds exceeded

可行的一種解決方案:

進入到PHP的安裝目錄,修改php.ini文件:

找到:

max_execution_time=30

修改為:

max_execution_time=300或者更大值!


第四部分:本文代碼的網(wǎng)盤地址!

鏈接:http://pan.baidu.com/s/1mhY7hMw

密碼:74hq

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI