快速列出Java BigInteger的1的选项有哪些?我们可以假设BigInteger是正数,但是它可能是一个相当大的Java BigInteger,带有多余的1。不过,我们希望很快找到它们。我想要一个Java BigInteger的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;
}

09-10 06:29
查看更多