题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
直接调用math库,代码如下:
class Solution{
public:
double Power(double base, int exponent){
return pow(base, exponent);
}
};
当然,面试时不可能直接去调用库来解决问题的,这一题可以采用位运算来解决。
位运算思路如下:
1.全面考察指数的正负、底数是否为零等情况。
2.写出指数的二进制表达,例如13表达为二进制1101。
3.举例:10^1101 = 10^0001 * 10^0100 * 10^1000。
4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。
代码如下:
class Solution{
public:
double Power(double base, int exponent){
double res = 1, exp = exponent;
if (exponent < 0){
if (base == 0){
throw exception("分母不能为0");
}
exponent = -exponent;
}
while (exponent != 0){
if (exponent & 1){
res *= base;
}
base *= base;
exponent >>= 1;
}
return exp >= 0 ? res:1/res;
}
};