今天在做题时学习了一种新的求幂方法,记录下来
快速幂可以用位运算来实现
&: 二进制“与”(都为1时,结果是1,否则是0。)
b & 1:取b二进制的最低位,判断和1是否相同,相同返回1,否则返回0
a >>= b:将 a 中的位向右移动 b 次(每一次移动都表示“除以 2”)
b >>=1:把b的二进制右移一位,即去掉其二进制位的最低位
常规求幂
int pow1(int a,int b){
int i,res=1;
for(i=1;i<=b;i++){
res*=a;
}
return (res);
}
这种办法在数据较多时经常会发生运算超时,不够快
快速求幂(位运算)
int pow2(int a,int b){
int res=1,k=a;
while(b){
if(b & 1)
res*=k;
k*=k;
b >>= 1;
}
return (res);
}
快速求幂(一般)
int pow3(int a,int b)
{
int res=1,k=a;
while(b!=0)
{
if(b%2)
res*=k;
k*=k;
b=b/2;
}
return res;
}
这里可以看出,在计算机中二进制向右移一位与除以二是一样的