【华为OJ】【066-求解立方根】

来源:互联网 发布:工业现场数据采集 编辑:程序博客网 时间:2024/06/05 09:17

【华为OJ】【算法总篇章】


【华为OJ】【066-求解立方根】

【工程下载】


题目描述

计算一个数字的立方根,不使用库函数详细描述:    接口说明    原型:    public static double getCubeRoot(double input)    输入:double 待求解参数    返回值:double  输入参数的立方根

输入描述

待求解参数 double类型

输出描述

输入参数的立方根 也是double类型

输入例子

216

输出例子

6.0

算法实现

import java.util.Scanner;/** * Author: 王俊超 * Date: 2015-12-27 16:40 * Declaration: All Rights Reserved !!! */public class Main {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));        while (scanner.hasNext()) {            double d = scanner.nextDouble();            System.out.printf("%.1f", getCubeRoot(d));        }        scanner.close();    }    /**     * 使用牛顿迭代法求立方根     * 已知利用牛顿迭代法求方程F(x)=0的解的公式为X[n+1] = X[n] - F(X[n])/F'(X[n]),     * 其中x[n]为第n次利用此公式求得值。     * 假如函数F(X) = X^m - a, 则根据牛顿迭代法第n+1次求方程F(x) = 0的解为X[n+1],     * 且X[n+1] = (1-1/m)*X[n] +a/(n*X[n]^(m-1))  -  (X[n]*X[n]*X[n]+a)/3*X[n]*X[n]。     *     * @param x     * @return     */    private static double getCubeRoot(double x) {        double x0;        double x1 = x;        do {            x0 = x1;            x1 = 2.0 / 3.0 * x0 + x / 3.0 / (x0 * x0);        } while (Math.abs(x1 - x0) > 0.000001);        return x1;    }}
2 0
原创粉丝点击