PHP
·
发表于 5年以前
·
阅读量:8073
判断水仙花数
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
<?php
/***水仙花数为不小于3位的数字,每位数字的N次幂的和等于该数字.N为该数字的位数*@namedaffodilsNum水仙花数*@param$places水仙花位数>=3*/
function daffodilsNum($places=3){
if(!defined('PLACES')) define('PLACES',is_numeric($places)?$places:3);
if(PLACES>=3){
$min=pow(10,PLACES-1);
//选数范围起始位置
$max=pow(10,PLACES);
//选数范围结束位置//开始选数
for($i=$min,$out='';$i<$max;$i++){
$sum=0;
//当前选数下各个幂值的和
$arr=str_split($i);//以字符串方式分割选数
for($j=0;$j<PLACES;++$j)//对每个数字作幂操作并累加
{
$sum+=pow($arr[$j],PLACES);
if($sum>$i)
//如果当前累加已大于选数,则跳出循环
break;}
if($sum==$i)//如果符合定义,将该数字添加到输出队列
$out.=$i."\n";
}
//输出队列
echo$out;
}
}
echo daffodilsNum(3);
?>