我有一个int数组,它的每个单元格都包含数字0/1,这个数组表示一个二进制数。我想打印数组的十进制数表示形式。为了做到这一点,我需要将单元格中的每一位转换成2^n的形式(n是单元格编号)并汇总所有的幂。但是,对于大型数组,总和可能会超过长边界。我正在寻找一个不使用biginteger/bigdecimal类的解决方案-这是我在大学里得到的作业的一部分。
b4lqfgs41#
如何表示一个比长的数字并打印出来完整的数字表示(如 BigInteger )没有必要这样做。如果你只想打印 int[] 包含一个0和1作为二进制数,那么简单的方法就是使用 String 代表数字。你可以这样做:
BigInteger
int[]
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是单元格编号)并汇总所有的幂。我不知道你所说的“总结力量”是什么意思,但我怀疑这是因为你认为你需要一个十进制的数字表示法。
wdebmtf22#
您必须实现任意大小数字的手动加法。在伪代码中:执行手动添加功能add(a,b)创建变量power2=1和total=0数组上从低位到高位的循环如果设置了位,则total=add(total,power2)power2=添加(power2,power2)返回总计
r8uurelv3#
我建议你用 BitSet ,将位数初始化为数组的长度,遍历数组以设置相应的位,然后使用 toByteArray() 方法。您可以解析结果字节数组,也可以将其提供给biginteger构造函数。
BitSet
toByteArray()
3条答案
按热度按时间b4lqfgs41#
如何表示一个比长的数字并打印出来
完整的数字表示(如
BigInteger
)没有必要这样做。如果你只想打印
int[]
包含一个0和1作为二进制数,那么简单的方法就是使用String
代表数字。你可以这样做:
请注意,上述方法比:
使用Java8+流可以更简洁地实现这一点。
我想打印数组的十进制数表示形式。
如果这确实是您想要做的,那么您实际上至少需要一个有限的“大数字”实现(足以重复除以10。)
然而,我并没有看到将一个有效的位数组(0和1)转换成以10为基数的数字的意义。
为了做到这一点,我需要将单元格中的每一位转换成2^n的形式(n是单元格编号)并汇总所有的幂。
我不知道你所说的“总结力量”是什么意思,但我怀疑这是因为你认为你需要一个十进制的数字表示法。
wdebmtf22#
您必须实现任意大小数字的手动加法。
在伪代码中:
执行手动添加功能add(a,b)
创建变量power2=1和total=0
数组上从低位到高位的循环
如果设置了位,则total=add(total,power2)
power2=添加(power2,power2)
返回总计
r8uurelv3#
我建议你用
BitSet
,将位数初始化为数组的长度,遍历数组以设置相应的位,然后使用toByteArray()
方法。您可以解析结果字节数组,也可以将其提供给biginteger构造函数。