快速幂的算法太美了
对于if((b&1)==1)这是判断b是否为奇数:
例如:如果b=8(1000),即指数为8,进入循环时,b不是奇数,那么基数翻倍,现在base值为,然后b右移,此时b为4.进入下一个循环;此时b还不是奇数,base再翻倍,此时base的值为,b为2;然后base再翻倍,,然后现在b为1,进入if中,result=;
当b=7(111)时,b为奇数,result=base,然后,b移位后为3(11),然后base翻倍,base的值为;下一循环,因为b为3是奇数,result现在为b为1,base再翻倍,此时base的值为;此时b为1,然后,result=;
哭死,这个while循环看来大半天才看懂
public class Solution {
public double Power(double base, int exponent) {
int b=exponent;
double result=1;
if(b<0){
if(base==0)
throw new RuntimeException("异常");
b=-b;
}else if(b==0){
return 1;
}
while(b!=0){
//判断b是奇数还是偶数,奇数自乘一次,偶数就翻倍
if((b&1)==1)
result=result*base;
b=b>>1;
//偶数翻倍
base*=base;
}
return exponent>0?result:(1/result);
}
}