剑指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 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步