题目

类型:Math
难度:中等
image.png

解题思路

image.png

代码

  1. class Solution {
  2. public double myPow(double x, int n) {
  3. long N = n;
  4. return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
  5. }
  6. public double quickMul(double x, long N) {
  7. double ans = 1.0;
  8. // 贡献的初始值为 x
  9. double x_contribute = x;
  10. // 在对 N 进行二进制拆分的同时计算答案
  11. while (N > 0) {
  12. if (N % 2 == 1) {
  13. // 如果 N 二进制表示的最低位为 1,那么需要计入贡献
  14. ans *= x_contribute;
  15. }
  16. // 将贡献不断地平方
  17. x_contribute *= x_contribute;
  18. // 舍弃 N 二进制表示的最低位,这样我们每次只要判断最低位即可
  19. N /= 2;
  20. }
  21. return ans;
  22. }
  23. }