題目:給定一個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;
}
};