Java BigInteger 求立方根方法的实现

本文介绍了一个使用Java实现的大数开立方算法,通过逐步逼近的方法计算任意长度非负整数的立方根,并提供了一个完整的代码示例及运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理和求平方根的一样


package com.swu.math;
import java.math.BigInteger;
public class Test
{
	public static String root3(String num)
	{
		
		BigInteger b=new BigInteger(num);
		//不用多解释了吧
		if(b.compareTo(BigInteger.ZERO)<0)
			return "不是非负数";
	
		String root="0"; //开立方结果
		String pre="0"; //开立方过程中需要计算的被减数
		BigInteger trynum; //试商,开立方过程中需要计算的减数
		BigInteger flag;  //试商,得到满足要求减数的之后一个数
		BigInteger _30=new BigInteger("30"); 
		BigInteger _300=new BigInteger("300"); 
		BigInteger dividend; //开立方过程中需要计算的被减数
		BigInteger A;
		BigInteger B;
		BigInteger BB;
		
		int len=num.length(); //数字的长度
		
		if(len%3==1)  //长度是奇数的画,首位补上1个0凑成偶数位
		{
			num="00"+num;
			len+=2;
		}
		
		if(len%3==2)
		{
			num="0"+num;
			len++;
		}
				
		for(int i=0;i<len/3;++i) //得到的平方根一定是len/2位
		{
			dividend=new BigInteger(pre+num.substring(3*i,3*i+3));	
			A=new BigInteger(root);
			
			for(int j=0;j<=9;++j)
			{
				B=new BigInteger(j+"");
				BB=new BigInteger((j+1)+"");
				
				trynum=_300.multiply(A.pow(2)).multiply(B)
						.add(_30.multiply(A).multiply(B.pow(2)))
						.add(B.pow(3));
				
				
				flag=_300.multiply(A.pow(2)).multiply(BB)
						.add(_30.multiply(A).multiply(BB.pow(2)))
						.add(BB.pow(3));
				
				//满足要求的j使得试商与计算中的被减数之差为最小正数
				if(trynum.subtract(dividend).compareTo(BigInteger.ZERO)<=0
						&&flag.subtract(dividend).compareTo(BigInteger.ZERO)>0)
				{
					root+=j;  //结果加上得到的j
					pre=dividend.subtract(trynum).toString(); //更新开立方过程中需要计算的被减数
					break;
				}
			}		
		}
		
		return root.substring(1);	
	}
	
	public static void main(String[] args)
	{
		BigInteger b=new BigInteger("123456789123456789123456789");
		b=b.pow(3);
		System.out.println(root3(b.toString()));

	}
}

运行结果

123456789123456789123456789


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值