数值的整数次方

来源:互联网 发布:帝国全面战争海军数据 编辑:程序博客网 时间:2024/05/18 18:14

题目描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路:

  • 1、当幂为负时,取倒数;
  • 2、当幂为0时,若底非0,则取1,若底为0,无意义,也取1;
  • 3、遍历则时间复杂度为O(n),对求幂进行优化,当幂数为偶数时,结果为幂为exponent/2的两个数的乘积,当幂为奇数时,结果为幂为(exponent-1)/2的两个数的乘积,再乘base。时间复杂度O(logn)。

1、递归

class Solution {public:    double Power(double base, int exponent) {        if (exponent == 0) return 1;        if (exponent == 1) return base;        int temp = abs(exponent);         double result = Power(base, temp >> 1);        result *= result;           if ((temp & 0x1) == 1)            result *= base;        result = exponent >= 0 ? result : 1/result;        return result;    }};

2、非递归

class Solution {public:    double Power(double base, int exponent) {        if (exponent == 0) return 1;        if (exponent == 1) return base;        int temp = abs(exponent);        double result = 1.0;        while (temp) {            if (temp & 0x1 == 1) result *= base;            base *= base;            temp >>= 1;        }        result = exponent >= 0 ? result : 1/result;        return result;    }};
原创粉丝点击