关键的就是要利用前面的结果,不要一步一步往后乘。
比如2^8可以利用2^2,2^4等
这里就要涉及到二进制的右移>>1和&1
public double Power(double base, int n) { double res = 1,curr = base; int exponent; if(n>0){ exponent = n; }else if(n<0){ if(base==0) throw new RuntimeException("分母不能为0"); exponent = -n; }else{// n==0 return 1;// 0的0次方 } while(exponent!=0) { if((exponent&1)==1) { res*=curr; } curr*=curr;//翻倍 exponent>>=1; } return n>=0?res:(1/res); }