【算法】快速幂

题目描述

 计算x的n次幂,不能用pow函数

算法原理

 因为要计算x的n次幂,直接通过for循环计算时间复杂度较高,可以通过快速幂来计算

假如x=2,n=10,10的二进制表示方法为

1010

n0101
12481632
x22*2=44*4=1616*16=256256*256=6553665536*65536=4,294,967,296
x=x x=x*xx=x*xx=x*xx=x*xx=x*x

根据上面的公式,则可以推断出,当n每次右移一位,相当于当前的值为当前的x*x,如果这一位为1就相当于当前位的ans*=x,否则则只有x*x,继续进行下一步判断,而循环结束的条件是n==0,也就是通过n的不断右移到为0的时候

核心代码实现

while(n!=0){    //当n==0的时候循环截止
    if(n&1){    //如果n的当前位为1,说明最终答案ans需要*x
        ans*=x;
    }
    n=n>>1;    //n右移一位
    x*=x;        //x乘以本身,相当于下一位的结果
}

时间复杂度大大减小 

例题

LeetCode:    剑指Offer 16. 数值的整数次方(快速幂) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值