【剑指Offer】面试题16. 数值的整数次方

需要注意的条件:当n为负数的时候,是求倒数的幂。当x为0的时候返回0。

N & 1 == 1相当于 N % 2 == 1

N >> 1 相当于 N / 2

假设K为偶数,

则当N是奇数的时候 X^(K+1) = (X^K/2) * (X^K/2) * X

则当N是偶数的时候 X^(K) = (X^K/2) * (X^K/2) 

 1 class Solution {
 2     public double myPow(double x, int n) {
 3         if(x == 0) return 0;
 4         long N = n;
 5         if(N < 0){
 6             N = -N;
 7             x = 1/x;
 8         }
 9         double ans = 1;
10         while(N > 0){
11             if((N & 1) == 1){
12                 ans *= x;
13             }
14             x *= x;
15             N = N>>1;
16         }
17         return ans;
18     }
19 }

 

posted @ 2020-06-05 12:34  xd会飞的猫  阅读(160)  评论(0编辑  收藏  举报