剑指16 数值的整数次方

  1. class Solution {
  2. public double myPow(double x, int n) {
  3. if ((x - 0) == 0)
  4. return 0;
  5. int absOfn = n;
  6. if (n < 0)
  7. absOfn = -n;
  8. double result = getPow(x, absOfn);
  9. if (n < 0)
  10. result = 1.0 / result;
  11. return result;
  12. }
  13. private double getPow(double x, int n) {
  14. if (n == 0)
  15. return 1;
  16. if (n == 1)
  17. return x;
  18. double result = getPow(x, n >>> 1);
  19. result *= result;
  20. // 一个数与2的n次方求余,可用数与运算(2^n - 1)
  21. if ((n & 1) == 1)
  22. result *= x;
  23. return result;
  24. }
  25. // private double getPow(double x, int absOfn) {
  26. // double result = 1.0;
  27. // for (int i = 1; i <= absOfn; ++i)
  28. // result *= x;
  29. // return result;
  30. // }
  31. }