剑指Offer 数值的整数次方

考察

代码的鲁棒性,边界条件的检查

非递归的快速幂

 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 }
View Code

 

posted @ 2019-04-26 09:42  Lorazepam  阅读(195)  评论(0编辑  收藏  举报