用while循环编写一个程序,找出所有的水仙花数

解决方案 »

  1.   

    <?php
    //设置页面编码为 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());
      

  2.   

    <?php
    //设置页面编码为 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());
      

  3.   

    $i      = 100;
    $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;