【剑指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 }