快速幂——一个可以快速求解a^b的算法

        计算a^b时,我们可能比较能想到的是用一个for循环来解决,循环b次,时间复杂度达到O(N),而快速幂是一种能同样实现a^b的算法,但是,时间复杂度却只有O(lgN),当b比较大时能有效的提高计算机的效率,接下来,我们来一起看一看它是怎么实现的吧!

举一个例子9的二进制表达式为1001,按照权值2^9可以转化为2^(2^3*1)*2^(2^2*0)*2^(2^1*0)*2^(2^0*1),原来要循环9次,现在只要循环4次,就可以解决问题,是不是很厉害,当然,当指数数值更大的时候更能体现出来呀。

int poww(int a,int b)
{
    int ans=1;//这里存放结果值,因为要实现连乘初值设为1
    while(b!=0)//也可以是(b>0)都可以
    {   
        if(b%2==1)//当然也可以是(b&1==1),都是取二进制的最后一位
        ans=ans*a;
        a=a*a;//权值增大一倍
        b=b>>1;//右移一位,舍弃最后一位让倒数第二位成为最后一位
    }
    return ans;//返回结果值,一定要记得呀
}

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值