算法练习 - HJ107 求解立方根

前言

求解立方根. 原题信息如下所示:

  • 计算一个数字的立方根,不使用库函数
    详细描述:
  • 接口说明
    原型:
    public static double getCubeRoot(double input)
    输入:double 待求解参数
    返回值:double 输入参数的立方根,保留一位小数
  • 输入描述: 待求解参数 double类型
    输出描述: 输入参数的立方根 也是double类型
  • 示例1
    输入 216
    输出 6.0
    (牛客网 - HJ107) 求解立方根

解析

求立方根.

  • 工具法.
    我们可以使用Math工具类的函数. pow(double,double), pow(double, 1.0/3.0).值得注意的是, 不能写成1/3. (因为1/3都是整数类型, 会被认为是0.)

工具类如何实现?Native方法. 线索已断.

### Math.class
    public static double pow(double a, double b) {
        return StrictMath.pow(a, b); // default impl. delegates to StrictMath
    }
    
### StrictMath.class
    public static native double pow(double a, double b);

最后具体的编程思路为, 使用如下公式进行计算. (具体的如何实现, 我还是摸不清头脑. yysy. 这个我们以后再进行深究吧.)
在这里插入图片描述

import java.util.*;
import java.text.DecimalFormat;

public class Simple {
	
	// 牛顿迭代法
	public static double getLiFangGen(double num) {
        if (num == 0) {
            return num;
        }
    
        double num1,num2;
        num1 = num;
        num2 = (2*num1/3)+(num/(num1*num1*3));//利用牛顿迭代法求解  
        while(Math.abs(num2-num1)>0.000001){  
            num1=num2;  
            num2=(2*num1/3)+(num/(num1*num1*3));  
        }  
        DecimalFormat df = new DecimalFormat("#.0");
        return Double.parseDouble(df.format(num2));  
    }

	public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        double input = sc.nextDouble();
        System.out.println(getLiFangGen(input));  
    }
}
# 求平方根.
    public static double SqrtByNewton(double target,double eps){
        double Xa=target,Xb;
        do {
            Xb = Xa;
            Xa = (Xa+target/Xa)/2;
        } while (fabsf(Xa,Xb)>eps);
        return Xa;
    }
    
    public static double fabsf(double a,double b){
        if(a>b){
            return a-b;
        }else
            return b-a;
    }


Reference

[1]. java实现开根号算法
[2]. Java 求一个数的立方根
[3]. C语言pow()函数:求x的y次方的值

©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页