题目描述.
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
public class Solution {
public double Power(double base, int exponent) {
}
}
解题思路
- 快速幂算法:将幂指数b转换为二进制 时间复杂度为f(n)=lgn
- 考察指数的正负、底数是否为零等情况。
- 写出指数的二进制表达,例如6表达为二进制0110。
- 举例:10^0110 = 100010*100100。
- 通过&1和>>1来逐位读取0110,为1时将该位代表的乘数累乘到最终结果。
public class Solution13 {
public double Power(double base, int exponent) {
int n = Math.abs(exponent);
if (exponent ==0){
return 1;
}
if (exponent ==1){
return base;
}
double result = Power(base,n>>1);
result *=result;
if ((n&1)==1){
result*= base;
}
if (exponent<0){
result=1/result;
}
return result;
}
}