天天看點

php循環學習十:判定水仙花數,列印全部水仙花數

在之前的文章《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."是水仙花數

";

}else{

echo $num."不是水仙花數

}

is_narcissistic(153);

is_narcissistic(152);

?>

輸出結果:

1.png

上例中pow($b,3)和$b*$b*$b是等價的,都可以計算$b的三次方($b^3)。pow(x,y)函數可以傳回 x 的 y 次方,即x^y。

我們知道水仙花數是一個 3 位數,則它是有定額的,那麼如何計算并輸出所有的水仙花數呢?這就需要使用循環了。

可以利用for循環來限定範圍在100~1000之間,寫法:

$i=0;

for ( $num = 100; $num < 1000; $num++){

echo $num."

$i++;

echo "水仙花數共有 $i 個";

看看輸出結果:

2.png

除了上面計算并輸出所有水仙花數的方法,還可以使用3個for循環周遊每一位來輸出所有水仙花數:

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

3.png

可以看出,輸出結果是一樣的。

可以看出,我們在for循環的循環體中,使用一個計數器$num,在每次輸出一個三位回文數後,自增1,這樣就可以統計出100~999内有多少回文數了。

好了就說到這裡了,有其他想知道的,可以點選這個哦。→ →php視訊教程

以上就是php循環學習十:判定水仙花數,列印全部水仙花數的詳細内容,更多請關注

富貴論壇

www.fgba.net其它相關文章!