首页 > 试题广场 >

开根号

[编程题]开根号
  • 热度指数:2567 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

在没有任何数学库函数的情况下,求一个数 m n 次方的结果。


输入描述:

每组输入只有1行,包括有一个正实数m和一个正整数n,其中1 <= n <= 32, 1<=m<=



输出描述:
输出只有一行,打印m开n次方的结果,小数点后面保留12位。
示例1

输入

2 10

输出

1.071773462536
java用快速幂求n次方,用二分逼近目标数。
import java.util.Scanner;
public class Main {
    public static double quickMul(double x, int N) {
        if (N == 0) {
            return 1.0;
        }
        double y = quickMul(x, N / 2);
        return N % 2 == 0 ? y * y : y * y * x;
    }
    
    public static double mySqrt(double m, int n){
        double eps = 10E-14;
        double l = 0;
        double r = m;
        while(Math.abs(r-l)>=eps){
            double mid= l+(r-l)/2;
            double tmp=quickMul(mid,n);
            if(tmp>m){
                r=mid;
            }else{
                l=mid;
            }
        }
        return l;        
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            double m = sc.nextDouble();
            int n = sc.nextInt();
            System.out.println(mySqrt(m, n));
        }
    }
}


发表于 2020-11-03 18:17:27 回复(0)