继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

剑指Offer-数值的正数次方

刘信坚
关注TA
已关注
手记 52
粉丝 7795
获赞 665

        最近一直在复习一些算法及数据结构方面的东西,就找了一个适合找工作笔试的题目,在剑指Offer上刷了几道题目,发现对复习知识点还是很有用的,推荐要找工作的伙伴去剑指Offer刷题。


题目描述

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


这是一道整数快速幂的题目,根据二进制的进位来进行乘法运算,大大减少的乘的次数:

例如 (5.08)^7 = (5.08)*(5.08)*(5.08)*(5.08)*(5.08)*(5.08)*(5.08)

假如是常规的乘法得乘七次,而快速幂的话则保留了上一次的乘积 (5.08)^7 = (5.08)^1 * (5.08)^3 * (5.08)^4 减少了很多次数

代码如下:


public class Solution {
    public double Power(double base, int exponent) {
        
        boolean flag = true;
        if(exponent < 0){
            flag = false;
            exponent = -exponent;
        }
        
        double res  = 1.00;
        while(exponent > 0){
            if(exponent % 2 == 1){
                //奇数位的话直接乘上base
                res = res * base;  
            }
            exponent = exponent >> 1;
            //偶数位的话叠加
            base = base * base;
        }   
        
        //如果为负数,结果则为倒数
        if(flag == false){
            return 1.0/res;
        }
        
        return res;
   }
}


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP