Implement pow(x, n), which calculates x raised to the power n (xn).

Example 1:

Input: 2.00000, 10
Output: 1024.00000
Example 2:

Input: 2.10000, 3
Output: 9.26100
Example 3:

Input: 2.00000, -2
Output: 0.25000
Explanation: 2-2 = 1/22 = 1/4 = 0.25
Note:

-100.0 < x < 100.0
n is a 32-bit signed integer, within the range [−231, 231 − 1]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/powx-n
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

数学解法

所以求 x的n次方 可以转换为 e的 n*ln(x)次方的解法

当然我是想不出来了,看的评论区.

exp(n*log(abs(x)));
c++里面有 exp 函数 可以求 e的 n次方.

class Solution {
public:
double myPow(double x, int n) {
if(x == 0) return 0;
double ans;
if(x > 0 || ((x < 0) && (n % 2 == 0))) ans = exp(nlog(abs(x)));
else ans = -exp(n
log(-x));
return ans;
}
};

作者:w-avan
链接:https://leetcode-cn.com/problems/powx-n/solution/c-ji-bai-shuang-bai-qiao-yong-dui-shu-han-shu-by-w/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

分治

这是 我能想到的 不是暴力的 一种解法了

x的 n次方 可以拆成 x的平方的 n/2次方
用java代码跟C++并没有什么不同

class Solution {
    public double myPow(double x, int n) {
        double ans = 1;
        int sign = 1;
        if (n < 0) {
            sign = -1;
            if (n == Integer.MIN_VALUE) {
                n = -(n + 1);
                ans *= x;
            } else {
                n = -n;
            }
        }
        while (n > 0) {
            if (n % 2 == 1)
                ans *= x;
            n /= 2;
            x *= x;
        }
        return sign == 1 ? ans : 1 / ans;
    }
}

if (n < 0) { // n是 负值特殊考虑
sign = -1;
if (n == Integer.MIN_VALUE) { // 最小值特殊考虑
n = -(n + 1);// 如果是 最小值了 取负值会溢出 所以可以先拿出来一个 ans = x 然后就可以理所应当的 -n -1;
ans *= x;
请在这里输入引用内容
/

如果直接 return ans = 0.0;是可以的 如果 double x = 1 或者 x是负数的话,我默认 double x 都是大于二的数 这样是错误的理解。
*/
} else {
n = -n; // 负值转换成正值 最后返回倒数即可
}
}

// 从这里开始正式运算
while (n > 0) {
if (n % 2 == 1)
ans *= x; // 不是2的倍数就乘 多出来的一次
n /= 2; // 平方 n除二
x *= x;
}

return sign == 1 ? ans : 1 / ans; // 负数返回倒数。

if(n == Integer.MIN_VALUE){

            n = -(n + 2);

            ans *= x;

            ans *= x;

            //return 0;

同理这样改也是对的,虽然有点画蛇添足 但是可以理解 为何

题目不难,思路很重要 数学那个解法我是真的没想到