java—如何表示一个比long长的数字并打印出来

pxy2qtax  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(399)

我有一个int数组,它的每个单元格都包含数字0/1,这个数组表示一个二进制数。我想打印数组的十进制数表示形式。为了做到这一点,我需要将单元格中的每一位转换成2^n的形式(n是单元格编号)并汇总所有的幂。但是,对于大型数组,总和可能会超过长边界。我正在寻找一个不使用biginteger/bigdecimal类的解决方案-这是我在大学里得到的作业的一部分。

b4lqfgs4

b4lqfgs41#

如何表示一个比长的数字并打印出来
完整的数字表示(如 BigInteger )没有必要这样做。
如果你只想打印 int[] 包含一个0和1作为二进制数,那么简单的方法就是使用 String 代表数字。
你可以这样做:

StringBuilder sb = new StringBuilder(array.length);
for (int i: array) {
    sb.append(i == 0 ? "0" : "1");
}
String binary = sb.toString();

请注意,上述方法比:

....
    binary += (i == 0 ? "0" : "1");
....

使用Java8+流可以更简洁地实现这一点。
我想打印数组的十进制数表示形式。
如果这确实是您想要做的,那么您实际上至少需要一个有限的“大数字”实现(足以重复除以10。)
然而,我并没有看到将一个有效的位数组(0和1)转换成以10为基数的数字的意义。
为了做到这一点,我需要将单元格中的每一位转换成2^n的形式(n是单元格编号)并汇总所有的幂。
我不知道你所说的“总结力量”是什么意思,但我怀疑这是因为你认为你需要一个十进制的数字表示法。

wdebmtf2

wdebmtf22#

您必须实现任意大小数字的手动加法。
在伪代码中:
执行手动添加功能add(a,b)
创建变量power2=1和total=0
数组上从低位到高位的循环
如果设置了位,则total=add(total,power2)
power2=添加(power2,power2)
返回总计

r8uurelv

r8uurelv3#

我建议你用 BitSet ,将位数初始化为数组的长度,遍历数组以设置相应的位,然后使用 toByteArray() 方法。您可以解析结果字节数组,也可以将其提供给biginteger构造函数。

相关问题