码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 50. Pow(x, n)

时间:2020-05-12 10:08:19      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:ams   c99   margin   pre   tags   pos   visible   param   color   

LeetCode 50. Pow(x, n)

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]

利用上一题的思路,直接转换成对数计算,注意边界条件即可

class Solution {
    public double myPow(double x, int n) {
        if(x == 0) return 0;
        int sign = 1;
        if(x < 0 && n % 2 != 0) sign = -1;
        x = Math.abs(x);
        return sign * Math.exp(n * Math.log(x));
    }
}

另外快速幂,见剑指offer 16提
考虑分母不能为0即可

class Solution {
    public double myPow(double x, int n) {
      if(x == 0 && n <= 0) throw new RuntimeException();
      
      if(n == 1) return x;
      if(n == 0) return 1;
      if(n == -1) return 1/x;
      
      if(x == 0) return 0;
      if(x == 1) return 1;
      if( x== -1) return (n & 1) == 0 ? 1 : -1;
      double even = myPow(x, n / 2);
      return even * even * myPow(x, n % 2);
    }
}

LeetCode 50. Pow(x, n)

标签:ams   c99   margin   pre   tags   pos   visible   param   color   

原文地址:https://www.cnblogs.com/muche-moqi/p/12874023.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!