如何检查Java中BigInteger的每个数字?

时间:2012-10-16 18:49:20

标签: java biginteger

如何检查Java中BigInteger的每个数字(例如System.out.println())?除了将其转换为字符串之外还有其他方法吗?

6 个答案:

答案 0 :(得分:4)

直接代码打印从最后到第一个的数字:

private static void printDigits(BigInteger num) {
    BigInteger[] resultAndRemainder;
    do {
        resultAndRemainder = num.divideAndRemainder(BigInteger.TEN);
        System.out.println(Math.abs(resultAndRemainder[1].intValue()));
        num = resultAndRemainder[0];
    } while (num.compareTo(BigInteger.ZERO) != 0);
}

答案 1 :(得分:1)

BigInteger API docs似乎没有提供任何功能。而且,这些数字很可能没有在基数10中表示(因为它效率很低)。因此,检查BigInteger的十进制数字的唯一方法是查看其字符串表示。

答案 2 :(得分:1)

您当然可以使用基本数学来计算每个数字。特别是方法divideAndRemainder可能会有所帮助。但我怀疑,这比转换为字符串和检查字符更有效。毕竟BigInteger数学比普通intlong数学更昂贵。

答案 3 :(得分:0)

我认为你能做到的唯一方法是将它转换为String并验证每个char。这是一个例子:

BigInteger bigInteger = new BigInteger("123");
String bigIntegerValue = bigInteger.toString();
for(int i = 0; i < bigIntegerValue.length(); i++) {
    System.out.println(bigIntegerValue.charAt(i));
}

答案 4 :(得分:0)

也许你可以尝试使用像这样的BitSet检查你的biginteger中的每一位,

 BitSet bitSet = BitSet.valueOf(bigInteger.toByteArray());

答案 5 :(得分:-1)

看起来很简单你需要做的是得到一个数字的每个数字。 创建一个循环,跟踪你的数字是否大于10,然后在其上执行mod 10操作,然后除以10。

 while (num >10)
{
     System.out.println(num%10);
     num = num/10;

}