12 数值的整数次方

题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
 
保证base和exponent不同时为0
 
思路:

tmp & 1 == 1,只能判断最后一位,0011 & 0010 = 0010 = 2.

快速幂的原理相当于将指数变为二进制,分别计算每一二进制位的值然后相乘。

一定记住对于这种有指数的一定要判断是否为负数,将负数转化为整数计算后取反,当然必须判断底数不为0;

*当n为偶数,a^n =(a^n/2)*(a^n/2
*当n为奇数,a^n = a^[(n-1)/2] * a^[(n-1)/2] * a
*时间复杂度O(logn)
func abs(a int) int {
    if a < 0 {
        return -a
    }
    return a
}

func Power( base float64 ,  exponent int ) float64 {
    // write code here
    if base < 0.00000001 && base > -0.00000001 {
        return 0.0
    }
    if exponent == 0 {
        return 1.0
    }
    
    res := 1.0
    tmp := abs(exponent)
    for tmp != 0 {
        if 1 & tmp == 1 {
            res = res * base
        }
        base = base * base
        tmp = tmp >> 1
    }
    
    if exponent < 0 {
        res = 1.0 / res
    }
    
    return res
    
}

 

posted @ 2021-04-07 23:35  zqlucky  阅读(72)  评论(0编辑  收藏  举报