🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
<div id="div12"><h4> 12, 数值的整数次方 <h4></div> 实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。 ~~~text 输入:2.00000 10 输出:1024.00000 输入:2.10000 3 输出:9.26100 输入:2.00000 -2 输出:0.25000 解释:2^-2 = 1/2^2 = 1/4 = 0.25 ~~~ ## 二分法 * 当n是偶数时,x^n = (x^2)^(n/2) * 当n是奇数时,x^n = x(x^2)^(n/2),相比偶数多出了一项x ```javascript function Power(base, exponent) { let res = 1, n; if (exponent > 0) { // 指数大于0的情况下 n = exponent; } else if (exponent < 0) { // 指数小于0的情况下 if (!base) throw new Error('分母不能为0'); n = -exponent; } else { // 指数等于0的情况下 return 1; } while (n) { // 也可以用递归做,这里采用了循环 if (n & 1) res *= base; // 当指数为奇数时,包括了1 base *= base; n >>= 1; } return exponent > 0 ? res : 1 / res; } ``` ~~~java if (n < 0) { x = 1 / x; exponent = -exponent; } ~~~ * 时间复杂度:O(logN)。跟二分操作的时间复杂度一样 * 空间复杂度:O(1)。没有引入额外的变量