php实现水仙花数的5个示例

PHP实现水仙花数的4个示例分享
本文提供了四个PHP实现水仙花数的示例代码,包括使用循环结构、函数、类和HTML代码片段来识别水仙花数。

水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 3^3+ 5^3 = 153)这篇文章主要介绍了php实现水仙花数的4个示例分享,需要的朋友可以参考下:

示例1,代码如下:

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

示例2,代码如下:

<?php
function cube( $n )
{
    return $n * $n * $n;
}

function is_narcissistic ( $n )
{
    $hundreds = floor( $n / 100);    //分解出百位
    $tens = floor( $n / 10 ) % 10;    //分解出十位
    $ones = floor( $n % 10 );    //分解出个位
    return (bool)(cube($hundreds)+cube($tens)+cube($ones) == $n);
}

 
for ( $i = 100; $i < 1000; ++ $i )
{
    if ( is_narcissistic($i) )
        echo $i."\n";
}
?>
示例3,代码如下:

<?php
//阿姆斯特朗数:一个k位数,它的每个位上的数字的k次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
class Armstrong {
 static function index(){
  for ( $i = 100; $i < 100000; $i++ ) {
   echo self::is_armstrong($i) ? $i . '<br>' : '';
  }
 }
 static function is_armstrong($num){
  $s = 0;
  $k = strlen($num);
  $d = str_split($num);
  foreach ($d as $r) {
   $s += bcpow($r, $k);
  }
  return $num == $s;
 }
}
Armstrong::index();

示例4,代码如下:

<html>

<head>
  <title></title>
</head>

<body>

<?php

 function winter($num)
 {
       if($num<1000){
       //定义个位
       $ge=$num%10;
       //定义十位
       $ten=(($num%100)-$ge) /10;
       //定义百位
       /*floor取整,忽略小数点后面的所有数*/
       $hundred=floor($num/100);
       $sum1=$ge*$ge*$ge+$ten*$ten*$ten+$hundred*$hundred*$hundred;
       if($sum1==$num){
               return 1;
                } else{
                        return 0;
                        }

               } else{
                       return -1;
                       }
         }

         if(winter(371)==-1) {
                 echo "大于1000的数";
            }else{
                  if(winter(371)) {
                          echo "Yes";
                          }
     else{
   echo "No";
   }
        }

?>

</body>
</html>

示例5,代码如下:

<?php 
header('content-type:text/html;charset=utf8 ');
 ?>
 <script>
for (var i=100; i < 1000; i++) { 
	a=parseInt(i%10);//分解出个位
	b=parseInt(i/10%10);//分解出十位
	c=parseInt(i/100%10);//分解出百位
	if(c*c*c+b*b*b+a*a*a==i){
		document.write(i+"<br>");
	}
}
 </script>


以下是基于提供的引用内容以及专业知识整理的关于 PHP 实现水仙花的代码示例: ### 使用函判断单个是否为水仙花 此方法通过定义一个函 `isArmstrong` 来判断给定字是否为水仙花。如果满足条件,则返回 `true`;否则返回 `false`。 ```php <?php function isArmstrong($number) { $sum = 0; $temp = $number; $n = strlen((string)$number); while ($temp != 0) { $remainder = $temp % 10; $sum += pow($remainder, $n); $temp = intval($temp / 10); } if ($sum == $number) { return true; } else { return false; } } // 测试水仙花 $number = 153; if (isArmstrong($number)) { echo $number . " 是水仙花"; } else { echo $number . " 不是水仙花"; } ?> ``` 上述代码实现了对单一字的检测功能[^1]。 --- ### 遍历求解小于1000的所有水仙花 该方法利用循环逐一验证范围内的每一个三位是否符合条件,并打印出所有的水仙花。 ```php <?php for ($i = 100; $i < 1000; $i++) { $a = intval($i / 100); // 百位 $b = intval(($i / 10) % 10); // 十位 $c = $i % 10; // 个位 if (pow($a, 3) + pow($b, 3) + pow($c, 3) == $i) { echo $i . "\t"; // 输出水仙花 } } ?> ``` 这段代码能够高效地找出所有小于1000的水仙花[^2]。 --- ### 找到前N个水仙花 为了寻找固定量的水仙花,可以通过设置计器 `$count` 和无限循环的方式实现。一旦找到足够的水仙花即可退出循环。 ```php <?php $count = 0; // 计器 $i = 100; // 起始值 while ($count < 5) { // 寻找前五个水仙花 $digits = str_split(strval($i)); $length = count($digits); $sum = 0; foreach ($digits as $digit) { $sum += pow($digit, $length); } if ($sum === $i) { echo "$i\t"; // 输出当前水仙花 $count++; // 增加计器 } $i++; } ?> ``` 这种算法特别适合于限定量的需求场景[^3]。 --- ### 面向对象方式实现水仙花 采用面向对象的思想封装逻辑,使代码更加模块化和可维护。 ```php <?php class ArmstrongNumber { public function check($number): bool { $sum = 0; $temp = $number; $n = strlen((string)$number); while ($temp != 0) { $remainder = $temp % 10; $sum += pow($remainder, $n); $temp = intval($temp / 10); } return $sum == $number; } public function findBelow(int $limit): array { $armstrongNumbers = []; for ($i = 100; $i < $limit; $i++) { if ($this->check($i)) { $armstrongNumbers[] = $i; } } return $armstrongNumbers; } } $obj = new ArmstrongNumber(); $result = $obj->findBelow(1000); print_r($result); ?> ``` 以上代码展示了如何使用类结构完成相同的功能[^4]。 --- #### 问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值