解题思路:
1.如果n==0,直接返回1;
2.如果n大于0,计算x的n次方,
3.如果n小于0,则将n取绝对值,x变为倒数,计算(1/x)的n次方
注意:
n的取值范围为[-2^31, 2^31-1];
如果n为-2^31,而其绝对值为2^31不在int型范围内,所以首先需要将n转化为long型;
class Solution {
public double myPow(double x, int n) {
double res=1.0;
if(x==0){
return 0;
}
long b=n;
if(b>0){
for(;b!=0;b>>=1){
if((b&1)==1){
res=res*x;
}
x=x*x;
}
return res;
}
if(b<0){
x=(1/x);
b=Math.abs(b);
for(;b!=0;b>>=1){
if((b&1)==1){
res=res*x;
}
x=x*x;
}
return res;
}
return res;
}
}