计算 x 的 n 次幂函数
将n换成二进制形式,以计算2的5次幂为例:
5的二进制形式为101,即
10
=
1
∗
2
0
+
0
∗
2
1
+
1
∗
2
2
10=1*2^0+0*2^1+1*2^2
10=1∗20+0∗21+1∗22
2
5
=
2
1
∗
4
0
∗
1
6
1
2^5=2^1*4^0*16^1
25=21∗40∗161
由此可见,每次乘的值都是前一个值的2次幂,当 n 对应位为0时跳过。
class Solution {
public:
double myPow(double x, int n) {
double res=1;
long t=n;
if (n<0) {
t=-t;
x=1/x;
}
else t=t;
if (t==0) return res;
else {
while(t){
if(t & 1) res *= x;
x *= x;
t >>= 1;
}
}
return res;
}
};