LeetCode 50. Pow(x, n)
比较典型的一道快速幂题目,可以使用位运算实现,也可以使用递归的做法实现,这里采用位运算的实现方式
class Solution {
public:
double myPow(double x, int n) {
//long long类型方便计算
typedef long long LL;
//记录指数幂是否为负数
bool is_minus = n < 0;
//res 记录答案
double res = 1;
//位运算,时间复杂度为O(log n)
for (LL k = abs(LL(n)); k; k >>= 1) {
//如果k的二进制串表示最末尾的一位为1,则res乘以x
if (k & 1) res *= x;
//x倍增
x *= x;
}
if (is_minus) res = 1 / res;
return res;
}
};