问题描述:
算法设计:要特别注意n可为正,也可为负数
方法一:直观上,最简单的方法就是:根据参数n直接遍历循环,但是遍历次数多,时间长;
public static double myPow(double x, int n) {
if(x==0){
return 0;
}
if(x==1){
return 1;
}
if(n==0){
return 1;
}
if(n==1){
return x;
}
if(n==-1){
return 1/x;
}
double result=x;
if(n>1){
for(int i=1;i
public static double myPow2(double x, int n) {
if(x==0){
return 0;
}
if(x==1){
return 1;
}
if(n==0){
return 1;
}
if(n==1){
return x;
}
if(n==-1){
return 1/x;
}
double result=1;
int k=0;
if(n>1){
k=n;
}else{
k=n*(-1);
}
if(k%2==0){
result=myPow2(x,k/2);
result=result*result;
}else{
result=myPow2(x,(k-1)/2);
result=result*result*x;
}
if(n<0){
result=1/result;
}
return result;
}
注,在写这个题的时候,想到一个
利用二分法求n次开方的算法
public static double mySqur(double x,int n){
if(x==0){
return 0;
}
if(x==1){
return 1;
}
if(n==1){
return x;
}
double result=0.00001;
double left=0;
double right=x;
while(result>0){
//二分法求解;
result=(left+right)/2;
System.out.println("result-->"+result);
double y=result;
int k=0;
if(n>1){
k=n;
}else{
k=n*(-1);
}
for(int j=1;j"+y);
if(yx+0.001){
right=result;
}else{
break;
}
}
if(n<0){
result=1/result;
}
return result;
}