題目
實現函數double Power(double base, int exponent),求base的exponent次方。不得使用庫函數,同時不需要考慮大數問題。
示例 1:
輸入: 2.00000, 10
輸出: 1024.00000
示例 2:
輸入: 2.10000, 3
輸出: 9.26100
示例 3:
輸入: 2.00000, -2
輸出: 0.25000
解釋: 2-2 = 1/22 = 1/4 = 0.25
題解
快速冪,注意n是負數時,-2147483648使用右移會變成-1,-1怎麼移都還是-1.並且int範圍最大就是2147483647,所以可以擴大n的取值範圍。
class Solution {
public:
double myPow(double x, int n) {
double ans = 1;
double a = x;
long n1 = n;
int flag = n1<0 ? 1 : 0;
n1 = abs(n1);
while(n1)
{
if(n1&1)
{
ans *= a;
}
a *= a;
n1 >>=1;
}
return flag ? 1/ans : ans;
}
};