java - 将 BigIntegers 打印到文本文件

标签 java performance biginteger println

我正在用 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?有没有更快的方法或任何可以优化它的方法?

最佳答案

您观察到的时间是由于 BigInteger.toString() 而不是写入文件。

将 looong BigInteger 转换为十进制(或任何其他基数)数字序列是一个繁琐的过程,涉及将 looong int[] 除以基数并以相当间接的方式组成结果字符串,甚至使用 StringBuilder。 (刚刚查了一下:1.8使用了改进的算法,但是35k或者456k位数还有很长的路要走。)

我曾经遇到过这个问题并最终编写了我自己的 BigInteger,使用可以非常快速地转换为基数 10 的表示。

如果您选择另一个库,请确保它允许修改对象(而不是返回新对象)的操作。如果您希望频繁/长时间转换为十进制字符串,请尝试找到一个表示以 10 的整数次方为基数的数字。

关于java - 将 BigIntegers 打印到文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24978180/

相关文章:

java - atoi函数的返回值

java - Apache Camel - 在 Rest DSL 中编码到 Json

java - 如何在 Netbeans 中添加 ADF 库?

javascript - 如何从 javascript 获取输入而不在更改按键之间出现卡顿

android - android 中搜索栏运行时错误

java - 使用多线程下载真的会加快速度吗?

Java BigInteger modInverse 和 modPow

java - WindowBuilder 中的多行文本标签?

java - 为什么 Haskell 可以轻松处理非常大的数字?

c# - 从两个大整数中获取精确的百分比