5

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

4

6 回答 6

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);
}
于 2012-10-16T19:02:43.883 回答
2

BigIntegerAPI 文档似乎没有提供任何这样的功能。此外,这些数字很可能没有以 10 为基数表示(因为它的效率很低)。因此,检查 BigInteger 十进制数字的唯一方法很可能是查看其字符串表示形式。

于 2012-10-16T18:54:20.477 回答
1

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

于 2012-10-16T18:54:43.353 回答
0

我认为您可以做到的唯一方法是将其转换为字符串并验证每个字符。这是一个例子:

BigInteger bigInteger = new BigInteger("123");
String bigIntegerValue = bigInteger.toString();
for(int i = 0; i < bigIntegerValue.length(); i++) {
    System.out.println(bigIntegerValue.charAt(i));
}
于 2012-10-16T18:55:08.043 回答
0

也许您可以尝试使用这样的BitSet检查大整数中的每一位,

 BitSet bitSet = BitSet.valueOf(bigInteger.toByteArray());
于 2012-10-16T19:00:19.657 回答
-1

获取数字的每个数字所需的操作似乎很简单。创建一个循环来跟踪您的数字是否大于 10,然后对其执行 mod 10 操作,然后除以 10。

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

}
于 2012-10-16T18:55:16.567 回答