考虑指数取
−
2
31
-2^{31}
−231即$-2147483648$4时,如果还是用int取正,得不到对应的正数,因为超过取值范围。因此选用unsigned int 来作为指数的数据类型
判断指数正负时,记得用给定指数n,而不是自己创建的unsigned int k,因为k无符号无法判断…
快速幂方法不用递归,推荐
递归
class Solution {
public:doublemyPow(double x,int n){
bool neg=false;unsignedint k=n;if(n<0){neg = true; k=-k;}double result =get_pow(x, k);return neg?1.0/result:result;}
private:doubleget_pow(double x,unsignedint n){if(n==0)return1;if(n==1)return x;double res =get_pow(x, n>>1);
res*=res;if(n&1){
res*=x;}return res;}};
快速幂(推荐),浮点数
class Solution {
public:doublemyPow(double x,int n){longlong k = n;return k <0?1.0/get_pow(x,-k):get_pow(x, k);}
private:doubleget_pow(double x,longlong k){double ans =1, base = x;while(k){if(k &1) ans *= base;
base *= base;
k = k >>1;}return ans;}};