给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
题解:这道题,让我学习到了快速幂的用法。。虽然还不熟练,还有&和左移右移
贴一下别人的解,C++的:
链接:https://www.nowcoder.com/questionTerminal/1a834e5e3e1a4b7ba251417554e07c00
来源:牛客网
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | /** * 1.全面考察指数的正负、底数是否为零等情况。 * 2.写出指数的二进制表达,例如13表达为二进制1101。 * 3.举例:10^1101 = 10^0001*10^0100*10^1000。 * 4.通过&1和>>1来逐位读取1101,为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); } |
这种的时间复杂度为O(logn)