BigInteger: conta o número de dígitos decimais em um método escalável

Eu preciso da contagem do número de dígitos decimais de umBigInteger. Por exemplo:

99 devolve21234 devolve49999 devolve412345678901234567890 devolve20

eu tenho que fazer issoparaBigInteger com184948 dígitos decimais e mais. Como posso fazer isso rápido e escalável?

oconverter para string a abordagem é lenta:

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

esteloop-devide-by-ten a abordagem é ainda mais lenta:

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

Existem métodos mais rápidos?

questionAnswers(4)

yourAnswerToTheQuestion