剑指Offer 数值的整数次方
考察
代码的鲁棒性,边界条件的检查
非递归的快速幂
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 链接:https://www.nowcoder.com/questionTerminal/1a834e5e3e1a4b7ba251417554e07c00 2 来源:牛客网 3 4 /** 5 * 1.全面考察指数的正负、底数是否为零等情况。 6 * 2.写出指数的二进制表达,例如13表达为二进制1101。 7 * 3.举例:10^1101 = 10^0001*10^0100*10^1000。 8 * 4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。 9 */ 10 public double Power(double base, int n) { 11 double res = 1,curr = base; 12 int exponent; 13 if(n>0){ 14 exponent = n; 15 }else if(n<0){ 16 if(base==0) 17 throw new RuntimeException("分母不能为0"); 18 exponent = -n; 19 }else{// n==0 20 return 1;// 0的0次方 21 } 22 while(exponent!=0){ 23 if((exponent&1)==1) 24 res*=curr; 25 curr*=curr;// 翻倍 26 exponent>>=1;// 右移一位 27 } 28 return n>=0?res:(1/res); 29 }