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
devolve2
1234
devolve4
9999
devolve4
12345678901234567890
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?