在先前的文章《PHP迴圈學習九:取得給定兩數間的最大公因數》中,我們為大家介紹了在PHP程式怎麼透過while迴圈語句來求給定兩個整數間的最大公約數,以下繼續php循環的學習~
本文主要帶大家來看看,給定一個三位整數,怎麼判斷該數是不是水仙花數?然後怎麼輸出全部水仙花數。
首先我們來看看什麼是水仙數?
水仙數是一個 3 位數,它的每個位上的數字的3次方和等於它本身(例如:1^3 5^3 3^3 = 153) 。
下面我們先來看看怎麼判斷給定的一個三位數,它是不是水仙花數?
想法分析:
根據上文我們知道:一個數字$num
要是水仙花數,那麼它要滿足: 個位的3次方十位的3次方百位的3次方= $num本身
那麼我們可以先分解$num
,得到個位元$g、
十位$s
、百位$b
然後判斷 $g^3 $^3 $b ^3
是不是等於$num
#下面看看實作程式碼:
<?php header("Content-type:text/html;charset=utf-8"); function is_narcissistic ( $num ){ $b= intval($num/100); $s= ($num/10)%10; $g= $num%10; // if($b*$b*$b+$s*$s*$s+$g*$g*$g==$num){ 等价于 if(pow($b,3)+pow($s,3)+pow($g,3)==$num){ echo $num."是水仙花数<br>"; }else{ echo $num."不是水仙花数<br>"; } } is_narcissistic(153); is_narcissistic(152); ?>
輸出結果:
上例中pow($b,3)
和$b*$b*$b
是等價的,都可以計算$b的三次方( $b^3
)。 pow(x,y)
函數可以傳回 x 的 y 次方,即x^y
。
我們知道水仙花數是一個 3 位數,則它是有定額的,那麼要如何計算並輸出所有的水仙花數呢?這就需要使用循環了。
可以利用for迴圈來限定範圍在100~1000之間,寫法:
<?php header("Content-type:text/html;charset=utf-8"); $i=0; for ( $num = 100; $num < 1000; $num++){ $b= intval($num/100); $s= ($num/10)%10; $g= $num%10; if(pow($b,3)+pow($s,3)+pow($g,3)==$num){ echo $num."<br>"; $i++; } } echo "水仙花数共有 $i 个"; ?>
看看輸出結果:
##除了上面計算並輸出所有水仙花數的方法,也可以使用3個for迴圈遍歷每一位來輸出所有水仙數:<?php header("Content-type:text/html;charset=utf-8"); $i=0; for($q=1;$q<=9;$q++){ for($w=0;$w<=9;$w++){ for($e=0;$e<=9;$e++){ if($q*$q*$q + $w*$w*$w + $e*$e*$e == 100*$q + 10*$w + $e){ echo "$q $w $e "."<p>"; $i++; } } } } echo "水仙花数共有 $i 个"; ?>
##可以看出,輸出結果是一樣的。
可以看出,我們在for迴圈的迴圈體中,使用一個計數器
$num,在每次輸出一個三位回文數後,自增1,這樣就可以統計出100~999內有多少回文數了。 好了就說到這裡了,有其他想知道的,可以點選這個喔。 → →
以上是PHP循環學習十:判定水仙花數,列印全部水仙花數的詳細內容。更多資訊請關注PHP中文網其他相關文章!