【发布时间】:2021-03-17 19:31:54
【问题描述】:
我有一个 int 数组,它的每个单元格都包含数字 0/1,该数组表示一个二进制数。 我想打印数组的十进制数表示。为此,我需要将单元格中的每个位转换为 2^n 形式(n 是单元格编号)并汇总所有幂。 但是,对于大型数组,总和可能会超过长边界。 我正在寻找一个不使用 BigInteger/BigDecimal 类的解决方案 - 这是我在大学时获得的作业的一部分。
【问题讨论】:
-
然后你必须实现一个像
BigInteger这样的类,它使用int[]来存储它的值。但是你为什么要那样做!?! -
为什么不使用
double的原始类型? -
@Agus 精度损失。问题已经说有超过 63 位(因为它超过了
long的容量),所以double支持的 53 位精度更差。 -
您可以将结果表示为一个字节数组,其中每个字节代表一个(十进制)数字。为了能够将一系列 1 和 0 转换为十进制数,您只需要对该数据执行两项操作:将其加倍(= 将其添加到自身)并将其添加 1。
-
字节数组。您可能想搜索“二进制编码的十进制”,通常缩写为 BCD。在像我这样的恐龙进行编程的旧时代的计算中,这经常用于此目的。