1 class Solution{ 2 public: 3 double myPow(double x,int n){ 4 if(1==x || n==0) return 1; 5 if(n == 1) return x; 6 if (n < 0) { 7 n = -n; 8 x = 1/x; 9 } 10 11 int res = 1; 12 while(n){ 13 if(n&1) res *= x; 14 x *= x; 15 n >>= 1; 16 } 17 18 return res; 19 } 20 };
结果值 result 初始为 1
base 初始为 3,此时 exponent 的二进制最右位为 1,更新结果为:base * result
exponent 右移一位。base 进行累乘,base 更新为 3 的 2 次方。由于 exponent 的二进制最右位为 0,不更新结果
exponent 右移一位。base 进行累乘,base 更新为 3 的 4 次方。此时 exponent 的二进制最右位为 1,更新结果为:base * result
结束
作者:xin-tan
链接:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/solution/tu-jie-tu-xie-zheng-li-3chong-jie-fa-bif-er-fen-fa/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。