计算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;//返回结果值,一定要记得呀
}