BigInteger: policz liczbę cyfr dziesiętnych w skalowalnej metodzie

Potrzebuję liczyć liczbę cyfr dziesiętnych aBigInteger. Na przykład:

99 zwraca21234 zwraca49999 zwraca412345678901234567890 zwraca20

Muszę to zrobićdlaBigInteger z184948 cyfry dziesiętne i więcej. Jak mogę to zrobić szybko i skalowalnie?

Theconvert-to-String podejście jest powolne:

public String getWritableNumber(BigInteger number) {
   // Takes over 30 seconds for 184948 decimal digits
   return "10^" + (number.toString().length() - 1);
}

Topętla-po-dziesiątce podejście jest nawet wolniejsze:

public String getWritableNumber(BigInteger number) {
    int digitSize = 0;
    while (!number.equals(BigInteger.ZERO)) {
        number = number.divide(BigInteger.TEN);
        digitSize++;
    }
    return "10^" + (digitSize - 1);
}

Czy są szybsze metody?

questionAnswers(4)

yourAnswerToTheQuestion