我在Java中计算非常大的因子。但是当我尝试将它们写入文本文件时,它需要花费太多时间。我正在使用这种方法打印数字。
PrintWriter writer = new PrintWriter(index + "!.txt", "UTF-8");
writer.println(number);
writer.close();
打印10,000!到文本文件需要194毫秒。文件大小为35.7 kB。
打印100,000!到文本文件需要24,314毫秒。文件大小为456.6 kB。
我觉得这个文件大小的速度太慢了。如何在几秒钟内打印数百万位数的BigIntegers?是否有更快的方法或任何我可以优化的方法?
答案 0 :(得分:3)
您观察到的时间是由BigInteger.toString()引起的,而不是写入文件。
将一个looong BigInteger转换为一个十进制(或任何其他基数)数字序列是一个繁琐的过程,涉及由一个looong int []的looong划分,并以相当环境的方式组成结果字符串,甚至使用StringBuilder。 (我刚检查过:1.8使用了改进的算法,但35k或456k的数字还有很长的路要走。)
我遇到过这个问题一次并最终编写了我自己的BigInteger,使用的表示法可以很快转换为基数10。
如果您选择其他库,请确保它允许修改对象的操作(而不是返回新对象)。如果您希望频繁/长时间转换为十进制字符串,请尝试找到一个代表基数中10的整数幂的数字。