java e次方,Java BigInteger求任意n(n∈N*)次方根的实现

原理是newton切线法,就不用介绍了吧

package com.swu.math;

import java.math.BigDecimal;

import java.math.BigInteger;

public class Test

{

//num是被开方数,n是开方次数,precision设置保留几位小数

public static String rootN_Decimal(String num,int n,int precision)

{

BigDecimal x=new BigDecimal(new BigInteger(num).divide(new BigInteger(n+"")));

BigDecimal x0=BigDecimal.ZERO;

BigDecimal e=new BigDecimal("0.1");

for(int i=1;i

e=e.divide(BigDecimal.TEN,i+1,BigDecimal.ROUND_HALF_EVEN);

BigDecimal K=new BigDecimal(num);

BigDecimal m=new BigDecimal(n);

long i=0;

while(x.subtract(x0).abs().compareTo(e)>0)

{

x0=x;

x=x.add(K.subtract(x.pow(n)).divide(m.multiply(x.pow(n-1)),precision,BigDecimal.ROUND_HALF_EVEN));

++i;

}

return x+" "+i;

}

public static void main(String[] args)

{

BigInteger b=new BigInteger("123456789123456789123456789");

b=b.pow(10);

System.out.println(rootN_Decimal(b.toString(), 10, 2));

}

}

运行结果

123456789123456789123456789.00 5117

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值