有哪些选项可以快速列出Java BigInteger的1?我们可以假设BigInteger是正面的,但它可能是一个相当大的Java BigInteger,备用1。不过我们很想找到它们。我想有一个枚举器或迭代器用于Java BigInteger的1位。
答案 0 :(得分:2)
您可以使用BigInteger
的{{3}}和getLowestSetBit
方法。例如,打印出来:
public static final void printOneIndexes(BigInteger n) {
while (!n.equals(BigInteger.ZERO)) {
int i = n.getLowestSetBit();
System.out.printf(" %d", i);
n = n.clearBit(i);
}
}
答案 1 :(得分:1)
Use .toString(radix) method. Like this: bigInteger.toString(2) and then check for ones in a string
答案 2 :(得分:1)
可以使用getLowestSetBit()
,但测试显示以下速度约为3-4倍:
public static final void printOneIndexes(BigInteger n)
{
for (int i = 0; i < n.bitLength(); i++)
{
if (n.testBit(i))
System.out.printf(" %d", i);
}
}
当然,如果您删除打印并将结果存储在列表中,它仍然会快得多。
我使用BigInteger进行了测试,只设置了几个位,由:
创建public static BigInteger makeSparseInt()
{
BigInteger b = BigInteger.ZERO.setBit(1000000);
Random r = new Random();
for (int i = 0; i < 100; i++)
{
b = b.setBit(r.nextInt(1000000));
}
return b;
}