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;i0)
		{
			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

你可能感兴趣的:(Java)