手记

剑指Offer-数值的正数次方

        最近一直在复习一些算法及数据结构方面的东西,就找了一个适合找工作笔试的题目,在剑指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;
   }
}


0人推荐
随时随地看视频
慕课网APP