1. 程式人生 > >使用PHP實現水仙花數及各種特殊有趣數的輸出

使用PHP實現水仙花數及各種特殊有趣數的輸出

php 水仙花數 特殊數據 有趣 算法

尊敬的讀者,見文好。


本文包含以下內容:

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

2,具體的方案及代碼實現!

3,你可能遇到的問題!

4,文末本文測試用源碼網盤地址!


特殊說明:

本文使用的語言是PHP;

本文運行的環境是:Apache2.4, PHP5.6


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

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

註:經過壓測,第一種思路的執行效率要高於第二種!可見對於數據的處理效率要遠遠高於對於文字的處理的!


第二部分:具體的方案及代碼實現!

第一種方案:

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

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

        $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 "<br>";
            }
        }
    }


第二種方案:

利用PHP中可以把字符串當數組處理的好處,先把數據轉化成字符串,利用下標直接取出每一位 並進行運算!

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

        $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<$number; ++$key)
            {
                // 獲取每一位的數字
                $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或者更大值!


第四部分:本文代碼的網盤地址!

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

密碼:74hq

本文出自 “栗子先生” 博客,轉載請與作者聯系!

使用PHP實現水仙花數及各種特殊有趣數的輸出