php水仙花数怎么写
时间 : 2023-03-25 17:32:01声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

PHP水仙花数指的是一个三位数各个位数立方和等于这个数本身的数。例如,153是一个水仙花数,因为 $1^3+5^3+3^3=153$。这里介绍几种方法来用 PHP 来寻找所有的水仙花数。

方法一:暴力枚举法

这是一种最简单的方法,就是枚举所有的三位数,然后判断它是否是水仙花数。虽然这种方法很慢,但是代码非常简单易懂。

```php

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

$sum = 0;

$num = $i;

while ($num > 0) {

$sum += pow($num % 10, 3);

$num = (int)($num / 10);

}

if ($sum == $i) {

echo $i . " ";

}

}

方法二:减少枚举次数

如果我们知道了一个数的各位数字,那么我们就可以直接计算出这个数的立方和。因此,我们可以通过减少枚举次数的方法来提高程序效率。首先,我们可以将百位、十位、个位上的数字枚举出来,然后再计算立方和。

```php

for ($i=1; $i<=9; $i++) {

for ($j=0; $j<=9; $j++) {

for ($k=0; $k<=9; $k++) {

$n = $i*100 + $j*10 + $k;

$sum = $i*$i*$i + $j*$j*$j + $k*$k*$k;

if ($sum == $n) {

echo $n . " ";

}

}

}

}

方法三:使用递归函数

为了使程序更加简洁,我们可以使用递归函数。我们可以将三位数的各个位数依次传入递归函数中,然后判断它们的立方和是否等于原数本身。

```php

function narcissistic($num, $n) {

if ($n == 0) {

return 0;

} else {

return pow($num % 10, 3) + narcissistic((int)($num/10), $n-1);

}

}

for ($i=100; $i<=999; $i++) {

if (narcissistic($i, 3) == $i) {

echo $i . " ";

}

}

这些方法可以用来计算所有的三位水仙花数。在实际开发中,我们可以根据具体场景选择最合适的方法。

水仙花数是指一个三位数,其各个位数数字的立方和等于该数本身。例如,153是一个水仙花数,因为1³+5³+3³=1+125+27=153。

下面是用 PHP 语言编写判断水仙花数的代码:

```php

<?php

$num = 153;

$temp = $num;

$sum = 0;

while ($temp != 0) {

$remainder = $temp % 10;

$sum = $sum + $remainder * $remainder * $remainder;

$temp = (int) $temp / 10;

}

if ($num == $sum) {

echo "该数是水仙花数。";

} else {

echo "该数不是水仙花数。";

}

?>

该程序先将要判断的数赋值给变量 `$num`,然后使用 `while` 循环来将该数的个位、十位、百位的立方和存储在变量 `$sum` 中。最后,判断 `$num` 是否等于 `$sum`,如果是,则输出该数是水仙花数,否则输出该数不是水仙花数。

你也可以使用 `for` 循环来遍历所有的三位数,将上述代码包含在循环中,从而求出所有的水仙花数。