Leetcode 50. Pow(x, n)
题目链接: Pow(x, n)
难度:Medium
题目大意:
求pow(x,n),x是double类型,n可正可负。
思路:
参考高赞回答,数学题。注意Integer.MIN_VALUE这个特例。
代码
class Solution {
public double myPow(double x, int n) {
long N=n;
if(N>=0){
return quickPow(x,N);
}
else{
return 1/quickPow(x,-N);
}
}
public double quickPow(double x,long n){
// java中int类型的范围n∈[−2147483648,2147483647],如果n=−2147483648,执行-n就会出现越界,所以转为long来操作就安全了。
double ans=1;
while(n>0){
if(n%2==1){//二进制的最后一位
ans=ans*x;
}
x=x*x;
n/=2;//舍去二进制的最后一位
}
return ans;
}
}