c++:
class Solution {
public:
double myPow(double x, int n) {
if(x==0||x==1){
return x;
}
// 考虑溢出的情况
long b=(long)n;
//若指数小于0,则把指数变为正,底数变为倒数
if(b<0){
x=1/x;
b=-b;
}
double res=1;
//二分法
//例如:9=1001,2^9=2^1*(2^2*2^2)*(2^4)
while(b){
if(b&1){
res*=x;
}
x*=x;
b>>=1;
}
return res;
}
};
python
class Solution(object):
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""
if x==1 and x==0:
return x
res=1
if n<0:
x,n=1/x,-n
while(n):
if(n&1):
res*=x
x*=x
n>>=1
return res