java求两个数后小数点默认无限长度

本文介绍了一个使用Java实现的算法,该算法能够高效地计算两个整数相除后的小数点后千万位的数值,并通过将计算结果分批写入文件的方式进行存储。

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

闲来没事,写个求两个数相除,想看看后面的小数,此算法可快速算出小数点后千万位。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

public class CopyOfChuFa {
	public static void main(String[] args)throws Exception {
		int a=1;//被除数
		int b=14754359;//除数
		int n=0;//小数点后循环次数
		int f;//每次相除余数
		int l=a%b;//第一次相除的余数
		long k=0;//用来记录小数点后位数
		
		File file=new File("E:/["+a+","+b+"]-result.txt");
		//删除上传计算结果文件
		if(file.exists()){
			file.delete();
		}
		FileWriter fw=new FileWriter(file,true);
		BufferedWriter bw=new BufferedWriter(fw);
		
		bw.write(a/b+".");
		f=a%b;
		a=f*10;
		
		List<Integer> result=new ArrayList<Integer>();
		while(f!=0&&n!=1){//整除或者算到第一重循环就结束
			result.add(a/b);
			f=a%b;
			a=f*10;
			//f==l表示到小数点循环开始,f==0表示两个数可以整除
			if(f==l||f==0){
				n++;
			}
			k++;
			//每隔700万就写入到文件中
			if(k%7000000==0){
				for(int i=0;i<7000000;i++){
					bw.write(result.get(i)+"");
				}
				result=new ArrayList<Integer>();
			}
		}
		System.out.println(k);
		//将最后的结果追加到文件末尾
		for(int i=0;i<result.size();i++){
			bw.write(result.get(i)+"");
		}
		
		bw.close();
		
	}
}

下面是计算出来的部分结果

0.00000006777658046683017540782354557049886070957064281816648219011073269940090247227954803051762533363868942052989221693738101397695420045018560277677939109384555438836753260511012372682540800315350873596067440137521392830417099109490286904365008334147217103772519023022281076392407152354094135841482506966246381831972503854623572599799150881444595458196455705056383676173258357072645446677825854718595365613646787366364069086295107771201717404327765103180693922385919984731291952432498084125511653878016659347925585923454892211854137478964691044863419684989364837876047343025881368346805171271757722582187406447138774378473507388562254720791326820772085049577551962779270858191806231636359126140281661846509224833149308621269144935405191103185167176696730776308208306440151008932343316304015647172472894281615351775024587648978854316883573186744337724193914489948360345576517421055025162394381213036771031530410775554532731648999458397345489560068316082047346143604069820993240031640818825134999087388344014131688133655958893232840545631294453388317310158984202566848210755885769080174882555046952565001298938164646800311690938250858610665498921369610160631173472192184018295881237538004870289519185482744455384337604907132868327251627807077216977030313550049853063762376935521224608944380436994924686324902355974935949437044333813485221553847239314157938003270762220。。。

第一重循环小数点就有7122780位,算出来的文件6.79M。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值