用while循环编写一个程序,找出所有的水仙花数
解决方案 »
- 如何用php对mongodb进行模糊查询(查询条件中有中文)?
- 对图片url加密的作用是什么
- 帮忙解释几个程序
- mvc 都是单一进口吗?
- php程序如何修改xml文件中的文字?
- 为什么我指定了charset=gb2312,打开的页面默认编码方式还是西欧ISO?郁闷!
- 在iframe中的header怎么弹出新的窗口?
- mysql 的日期只能是1970年--2038年吗?
- PHPn层方案挑战J2EE,.net 有兴趣的朋友来看看..
- Linux 下有没有你 window上的Access 一样的数据库
- 使用preg_replace()替换中文符号导致替换为多个如何解决
- 请问大佬 如何实现用带key的链接访问浏览限时
//设置页面编码为 utf-8
header("content-type:text/html;charset=utf-8;");/**
* @param $smallnum 需要查找的最小水仙花范围
* @param $maxnum 需要查找的最大水仙花范围
* @param $digit 水仙花数
* @return
*/
function narcissus($smallnum = 100, $maxnum = 1000, $digit = 3) {
for($i = $smallnum; $i < $maxnum;$i ++) {
//分解百位
$hundreds = floor($i / 100);
//分解十位
$tens = floor($i / 10) % 10;
//分解个位
$ones = floor($i % 10);
//水仙花数成立时
if(bcpow($hundreds,$digit) + bcpow($tens,$digit) + bcpow($ones,$digit) == $i)
//写入数组
$arr[] = $i;
}
//返回所有水仙花数
return $arr;
}var_dump(narcissus());
//设置页面编码为 utf-8
header("content-type:text/html;charset=utf-8;");/**
* for循环查找水仙花数
* @param $smallnum 需要查找的最小水仙花范围
* @param $maxnum 需要查找的最大水仙花范围
* @param $digit 水仙花数
* @return 返回水仙花数组
*/
function narcissus_for($smallnum = 100, $maxnum = 1000, $digit = 3) {
for($i = $smallnum; $i < $maxnum;$i ++) {
//分解百位
$hundreds = floor($i / 100);
//分解十位
$tens = floor($i / 10) % 10;
//分解个位
$ones = floor($i % 10);
//水仙花数成立时
if(bcpow($hundreds,$digit) + bcpow($tens,$digit) + bcpow($ones,$digit) == $i)
//写入数组
$arr[] = $i;
}
//返回所有水仙花数
return $arr;
}
/**
* while循环查找水仙花数 原理都是一样的,保证每个位上的数字的 n 次幂之和等于它本身即可
* @param $smallnum 需要查找的最小水仙花范围
* @param $maxnum 需要查找的最大水仙花范围
* @param $digit 水仙花数
* @return 返回水仙花数组
*/
function narcissus_while($smallnum = 100, $maxnum = 1000, $digit = 3) {
//初始化当前数字
$i = $smallnum;
//开始循环
while($i < $maxnum) {
//分解百位
$hundreds = floor($i / 100);
//分解十位
$tens = floor($i / 10) % 10;
//分解个位
$ones = floor($i % 10);
//水仙花数成立时
if(bcpow($hundreds,$digit) + bcpow($tens,$digit) + bcpow($ones,$digit) == $i)
//写入数组
$arr[] = $i;
//计数
$i++;
}
//返回所有水仙花数
return $arr;
}//for循环
var_dump(narcissus_for());
//换个行
echo "<br/>";
//while循环
var_dump(narcissus_while());
$numArr = array();while ($i < 1000) {
$i1 = substr($i, 0, 1);
$i2 = substr($i, 1, 1);
$i3 = substr($i, 2, 1);
$newNum = pow($i1, 3) + pow($i2, 3) + pow($i3, 3); if ($i == $newNum) {
$numArr[] = $i;
} ++$i;
}print_r($numArr);
die;