• php实现数值的整数次方


    php实现数值的整数次方

    一、总结

    没有考虑到指数为负数的情况

    二、php实现数值的整数次方

    题目描述:

    给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

    代码一(phpAC):

     1 <?php
     2  
     3 function Power($base, $exponent)
     4 {
     5          
     6     if($exponent >= 0){
     7         $res = 1;
     8     while($exponent >= 1){
     9         $res = $res * $base;
    10         $exponent--;
    11     }
    12           return $res;
    13     }
    14     if($exponent < 0){
    15         $exponent2 = abs($exponent);
    16         $res = 1;
    17         while($exponent2 >=1){
    18             $res = $res *$base;
    19             $exponent2--;
    20         }
    21         return 1/$res;
    22          
    23     }
    24    
    25 }

    代码二(javaAC):

     1 /**
     2  * 1.全面考察指数的正负、底数是否为零等情况。
     3  * 2.写出指数的二进制表达,例如13表达为二进制1101。
     4  * 3.举例:10^1101 = 10^0001*10^0100*10^1000。
     5  * 4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。
     6  */
     7 public double Power(double base, int n) {
     8     double res = 1,curr = base;
     9     int exponent;
    10     if(n>0){
    11         exponent = n;
    12     }else if(n<0){
    13         if(base==0)
    14             throw new RuntimeException("分母不能为0"); 
    15         exponent = -n;
    16     }else{// n==0
    17         return 1;// 0的0次方
    18     }
    19     while(exponent!=0){
    20         if((exponent&1)==1)
    21             res*=curr;
    22         curr*=curr;// 翻倍
    23         exponent>>=1;// 右移一位
    24     }
    25     return n>=0?res:(1/res);       
    26 }

    代码三(php快速幂):

    <?php
    
    //算法:肯定用快速幂啊
    $arr = array(1);//还是写记忆化递归
    function Power($base, $exponent)
    {
        global $arr;
        $arr[1]=$base;
        if($arr[$exponent]) return $arr[$exponent]; //这样就不用写那个赋初值记忆化数组为-1的循环了
        else{
            if($exponent%2==1) return $arr[$exponent]=Power($base, intval($exponent/2))*Power($base, intval($exponent/2))*$base;
            else return $arr[$exponent]=Power($base, intval($exponent/2))*Power($base, intval($exponent/2));
        }
    }

    这个代码-2,3都没过

    2,-3也过不了

    四、其它

    Notice: Undefined offset: 14 in D:softwarecodephpStudy2018PHPTutorialWWWindex.php on line 8
    
    Notice: Undefined offset: 7 in D:softwarecodephpStudy2018PHPTutorialWWWindex.php on line 8
    
    Notice: Undefined offset: 3 in D:softwarecodephpStudy2018PHPTutorialWWWindex.php on line 8
    16384Array ( [0] => 1 [1] => -2 [3] => -8 [7] => -128 [14] => 16384 ) Hello World

    这是因为数组没定义这个数组的偏移量,也就是

  • 相关阅读:
    git merge merge错误 —— 纠正
    copy —— docker cp & kubectl cp
    docker —— 获取 仓库中的 tag 列表
    课程——《深度学习的优化方法》
    基础知识篇(干货,次次都有新体悟)——十大经典排序算法2
    基础知识篇(干货,次次都有新体悟)——数据结构
    criteo 接口升级——MAPI deprecated
    CAP
    Redis 数据类型
    十大经典排序算法(转发)
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9054798.html
Copyright © 2020-2023  润新知