编号为二进制的数字

时间:2017-04-26 07:48:14

标签: java arrays algorithm math

我必须处理用2 ^ k基数写的非常大的数字。我做了一个基于数组的表示法,例如数字751表示为long [] {0,7,5,1},-751表示长[] {1,7,5,0}。

我的问题是如何将它们转换为二进制表示?我想避免将它们转换为BigInteger并进行分割。 如果是负数,我需要两个补码。

1 个答案:

答案 0 :(得分:0)

这绝不是base-2 ^ k编码;它是一个基数为10的编码:

  

751在基数10中表示为long [] {0,7,5,1},因为   751是7 * 10 ^ 2 + 7 * 10 ^ 1 + 1 * 10 ^ 0

作为base-16编码:

  

1873在基数16中表示为long [] {0,7,5,1},因为    1873年是7 * 16 ^ 2 + 5 * 16 ^ 1 + 1 * 16 ^ 0

假设long[] n位于基数2 ^ k,那么

value = n[0]*(2^(k*(n.length-1)) + ... + [n.length-1]

(这不是你在现实生活中会做的事情:你会使用BigInteger)

然后转换为二进制很简单:

StringBuilder binaryString = new StringBuilder();
for (long l : n) {
   binaryString.append(binaryFor(l));
}

也就是说,只需将每个数组元素转换为二进制字符串并连接所有内容即可。

在数组中编码整数的更好方法是将单位置于n [0],而不是n [length-1];然后你需要使用prepend而不是append。