数值的整数次方

数值的整数次方

https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00?tpId=13&&tqId=11165&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

一、使用递归的快速幂

求base的exponent次方,可分为以下两种
图片说明
我们可以使用递归进行求解此问题
但是还有一个问题就是,当n为负数的时候,那么求得的最终结果必定是当n为正数时求的结果的倒数,
所以我们还需要有一个标记,标记n是正数还是负数。

public double Power(double base, int exponent) {
        if(exponent == 0)
            return 1;
        if(exponent == 1)
            return base;  /*两个特判*/
        boolean isNegative = false;  /*用来标记exponent是否为负数*/
        if(exponent < 0){
            exponent = -exponent;   /*这里将exponent重新变为正数*/
            isNegative = true;      /*标志为负数*/
        }
        double pow = Power(base*base, exponent/2);   /*递归求解*/
        if(exponent % 2 != 0){          /*如果exponent为奇数,则还需要乘多一边base*/
            pow *= base;
        }
        return isNegative ? 1/pow:pow;   /*判断exponent为正数还是负数*/
  }

二、非递归的快速幂

已知6可以表示成二进制110
图片说明
图片说明
所以将指数跟1进行与运算,如果不为0,则表示当前位需要乘进结果中,具体看代码就能够明白

public double Power(double base, int exponent) {
        // exponent为负数则先将底数取倒数,然后按指数为正数的去计算
        if(exponent < 0){
            base = 1/base;
            exponent = -exponent;
        }
        double res = 1.0;   /*作为返回结果*/
        while(exponent != 0){   /*当指数不为0时*/
            if((exponent&1)==1)   /*等于1,则证明当前位数需要乘进结果*/
                res *= base;
            base*=base;
            exponent >>= 1;
        }
        return res;
  }

以base=3,exponent=6为例子,用表格记录每次操作

exponent base res 操作
110 3 1.0 刚开始
011 3*3=9 1.0 while第一次结果
001 9*9=81 1.0*9=9 while第二次结果
000 81*81 9*81=729 while第三次结果,exponent为0退出循环
剑指offer 文章被收录于专栏

为刷过的每一道题都书写一篇题解,便于重复练习~

全部评论
都没有注意到int的范围吗?直接取负号会导致越界
点赞 回复 分享
发布于 2021-03-03 21:15

相关推荐

07-09 20:50
门头沟学院 Java
码农索隆:1.教育背景和荣誉证书合二为一。 2.获奖项目理一遍,你做了什么,对你求职的岗位有什么帮助,没有就删掉。 3.技能特长和教育背景交换位置。 4.技能特长写的太差,上网上找简历参考。都不用问你别的,一个redis就能把你问住,写写你具体会redis哪些方面的知识。
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
07-25 13:42
门头沟学院 Java
安锋:看看老板的腿
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务