美文网首页
50. Pow(x, n)

50. Pow(x, n)

作者: 一里山 | 来源:发表于2017-04-13 10:39 被阅读30次

    题目描述

    Implement pow(x, n).
    实现x的n次方计算

    问题分析

    1. 暴力求解
    2. 考虑极端输入:
      2.1 结果为double上下界如何处理
      2.2 n<0如何处理
    3. 输出小数的保留问题

    提交&结果

    1. Wrong Answer

    Input:
    34.00515
    -3

    解决:若n<0,n取绝对值,结果求倒数

    1. Time Limit Exceeded

    Last executed input:
    0.00001
    2147483647

    解决:参考讨论,利用二分法

    public double myPow(double x, int n) {
          if(n == 0)
              return 1;
          if(n<0){
              n = -n;
              x = 1/x;
          }
          if(n%2==0){
              return myPow(x*x,n/2);
          }else {
              return x*myPow(x*x,(n-1)/2);
          }
      }
    
    1. Wrong Answer

    Input:
    2.00000
    -2147483648
    Output: ∞
    Expected: 0.00000

    解决:修改n<0的情况:

    if(n<0){
          if(n == Integer.MIN_VALUE)
              return 1.0/ (myPow(x, Integer.MAX_VALUE) * x);
          else
              return 1.0/myPow(x, -n);
    }
    

    相关文章

      网友评论

          本文标题:50. Pow(x, n)

          本文链接:https://www.haomeiwen.com/subject/hyzvattx.html