BigInteger: policz liczbę cyfr dziesiętnych w skalowalnej metodzie
Potrzebuję liczyć liczbę cyfr dziesiętnych aBigInteger
. Na przykład:
99
zwraca2
1234
zwraca4
9999
zwraca4
12345678901234567890
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?