赞
踩
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Main main = new Main();
double n = sc.nextDouble();
int m = sc.nextInt();
System.out.println(main.mySqrt(n, m));
}
private double mySqrt(double n, int m){
/*
我这里输入跟题目给的不一样,n 是 m,而 m 是 n
我们使用二分逼近的方法
首先 mid = (left + right) >>> 1;
然后将 n 除以 mid ,m - 1 次
为啥?因为我们要跟 mid 进行比较,判断 mid 是否是适合 n 开 m 次方后的数
比如 n 开方,那么我们只需要 n 除以 mid 一次即可,然后将结果跟 mid 比较
如果接近,那么继续逼近
同时,我们可以换做是 m 个 mid 相乘,然后跟 n 进行比较,一样的思路
只不过一个是乘,一个是除
*/
double pre = 0;
double left = 0;
double right = n;
//迭代精准度
double eps = 1e-12;
while(right - left > eps || left - right > eps){
double mid = (left + right) / 2;
double temp = 1;
for(int i = 0; i
temp *= mid;
}
if(temp > n){
right = mid;
}else{
left = mid;
}
pre = mid;
}
return pre;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。