50. Pow(x, n)

题目描述

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))