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の10進数を検査する唯一の方法は、その文字列表現を調べることである可能性が最も高いです。

于 2012-10-16T18:54:20.477 に答える
1

もちろん、基本的な数学を使用して各桁を計算することもできます。特にこの方法divideAndRemainderはここで役立つかもしれません。しかし、これが文字列に変換して文字を調べるよりも効率的であるとは思えません。結局のところ、数学BigIntegerは普通の数学よりも高価です。intlong

于 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を使用して、biginteger の各ビットを調べてみることができるかもしれません。

 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 に答える