php循环学习十:判定水仙花数,打印全部水仙花数

简介: 在之前的文章《PHP循环学习九:获取给定两数间的最大公因数》中,我们给大家介绍了在PHP程序怎么通过while循环语句来求给定两个整数间的最大公约数,下面继续php循环的学习~本文主要带大家来看看,给定一个三位整数,怎么判断该数是不是水仙花数?然后怎么输出全部水仙花数。首先我们来看看什么是水仙花数?水仙花数是一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。下面我们先来看看怎么判断给定的一个三位数,它是不是水仙花数?

在之前的文章《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之间,写法:

<?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."
";
$i++;
}
}
echo "水仙花数共有 $i 个";
?>
看看输出结果:

2.png

除了上面计算并输出所有水仙花数的方法,还可以使用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 个";
?>
看看输出结果:

3.png

可以看出,输出结果是一样的。

可以看出,我们在for循环的循环体中,使用一个计数器$num,在每次输出一个三位回文数后,自增1,这样就可以统计出100~999内有多少回文数了。

好了就说到这里了,有其他想知道的,可以点击这个哦。→ →php视频教程

以上就是php循环学习十:判定水仙花数,打印全部水仙花数的详细内容,更多请关注富贵论坛www.fgba.net其它相关文章!

目录
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
如何学习PHP编程?
【10月更文挑战第2天】如何学习PHP编程?
38 9
|
2月前
|
IDE 关系型数据库 PHP
php语言学习
【9月更文挑战第1天】php语言学习
34 3
|
2月前
|
SQL 安全 IDE
如何开始学习PHP?
【9月更文挑战第1天】如何开始学习PHP?
46 1
|
3月前
|
Java PHP
从引用计数到循环垃圾回收——解锁PHP高效内存管理的秘密
【8月更文挑战第2天】深入理解PHP中的垃圾回收机制
85 3
|
3月前
|
PHP
php怎么循环读取文件夹里的文件
`DirectoryIterator`类提供了一个接口来遍历文件系统目录。与 `glob`函数相比,使用 `DirectoryIterator`类可以获得更多文件属性信息,如文件大小、修改时间等,从而进行更复杂的文件处理操作。
42 0
|
4月前
|
前端开发 JavaScript 安全
|
4月前
|
存储 PHP 数据库
|
4月前
|
PHP 数据安全/隐私保护 开发者
|
4月前
|
存储 Serverless PHP