classSolution{publicdoublemyPow(double x,int n){longN= n;returnN>=0?quickMul(x,N):1.0/quickMul(x,-N);}publicdoublequickMul(double x,longN){if(N==0){return1.0;}double y =quickMul(x,N/2);returnN%2==0? y * y : y * y * x;}}
方法二:快速幂 + 迭代
publicdoublemyPow(double x,int n){longN= n;returnN>=0?quickMul(x,N):1.0/quickMul(x,-N);}publicdoublequickMul(double x,longN){double ans =1.0;//贡献的初始值为 xdouble x_contribute = x;//在对 N 进行二进制拆分的同时计算答案while(N>0){if(N%2==1){//如果 N 二进制表示的最低位为 1, 那么需要计入贡献
ans *= x_contribute;}//将贡献不断地平方
x_contribute *= x_contribute;//舍弃 N 二进制表示的最低位,这样我们每次只要判断最低位即可N/=2;}return ans;}