难度:中等

    题目描述:
    实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

    示例:

    1. 输入: 2.00000, 10
    2. 输出: 1024.00000

    解题思路:
    位运算

    1. var myPow = function(x, n) {
    2. if (n === 0) {
    3. return 1;
    4. }
    5. if (n === 1) {
    6. return x;
    7. }
    8. const isNegative = n < 0; // 是否是负指数
    9. let absn = Math.abs(n);
    10. let result = 1;
    11. while (absn) {
    12. // 如果n最右位是1,将当前x累乘到result
    13. if (absn & 1) {
    14. result = result * x;
    15. }
    16. x = x * x; // x自乘法
    17. absn = Math.floor(absn / 2); // n右移1位
    18. }
    19. return isNegative ? 1 / result : result;
    20. };

    二分法

    1. var myPow = function(x, n) {
    2. const isNegative = n < 0; // 是否是负指数
    3. const result = absMyPow(x, Math.abs(n));
    4. return isNegative ? 1 / result : result;
    5. };
    6. function absMyPow(base, exponent) {
    7. if (exponent === 0) {
    8. return 1;
    9. }
    10. if (exponent === 1) {
    11. return base;
    12. }
    13. const subResult = absMyPow(base, Math.floor(exponent / 2));
    14. return exponent % 2 ? subResult * subResult * base : subResult * subResult;
    15. }