这是在面试时候,无准备折腾除了的递归写法。
class Solution {
public double myPow(double x, int n) {
// if(x==0) return 0;
// long b =
if(n==0) return 1.0;
if(n==1) return x;
// 把n为负数的情况改为整数
boolean flag = false;
if(n<0){
flag = true;
n = -n;
}
double halfValue = myPow(x,n/2);
double ans;
if(n%2==0){
ans = halfValue*halfValue;
}else{
ans = halfValue*halfValue*x;
}
if(flag){
return 1/ans;
}
return ans;
}
}
问题:这种写法只能算n>0的情况。小于0需要转化成整数。除了一个用例过不去,他选的是N为int负数的最大值
标准答案
class Solution {
public double myPow(double x, int n) {
if(x == 0) return 0;
long b = n;
double res = 1.0;
if(b < 0) {
x = 1 / x;
b = -b;
}
while(b > 0) {
if((b & 1) == 1) res *= x;
x *= x;
b >>= 1;
}
return res;
}
}
标签:return,shu,Offer,int,double,16,整数,次方
From: https://www.cnblogs.com/chenyi502/p/17552332.html