非递归快速幂(求一个数的n次幂)

数值的整数次方

http://www.nowcoder.com/questionTerminal/1a834e5e3e1a4b7ba251417554e07c00

/*
时间复杂度为logn   
b^{9}=b*((b^2)^2)^2)   
递归思路:
当n&1不为0时; f(b,n)=f(b,n/2)*b  为奇数时。
当n&1为0时;  f(b,n)=f(b,n/2)    为偶数时。
*/
class Solution {
public:

    double Power(double b, int n) {
        if (n < 0) {
            b = 1 / b;
            n = -n;
        }//负数次方归正
        double x = b; // 记录x^0, x^1, x^2 ...
        double ret = 1.0;
        while (n) {
            if (n&1) {
                ret *= x; // 二进制位数是1的,乘进答案。
            }
            x *= x;
            n >>= 1;
        }
        return ret;
    }
};
全部评论

相关推荐

点赞 评论 收藏
分享
牛客96763241...:杭电✌️也是打完招呼,没人回吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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