如何列出计数数字?

时间:2018-02-03 03:35:16

标签: java biginteger

有哪些选项可以快速列出Java BigInteger的1?我们可以假设BigInteger是正面的,但它可能是一个相当大的Java BigInteger,备用1。不过我们很想找到它们。我想有一个枚举器或迭代器用于Java BigInteger的1位。

3 个答案:

答案 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;
}