Ho bisogno di contare il numero di cifre decimali di un BigInteger
. Ad esempio:BigInteger: conta il numero di cifre decimali in un metodo scalabile
99
rendimenti2
1234
rendimenti4
9999
rendimenti4
123456789
rendimenti20
ho bisogno di fare questo per un BigInteger
con 184948
de cifre cifre e altro. Come posso fare questo veloce e scalabile?
Il convert-to-String approccio è lento: ci
public String getWritableNumber(BigInteger number) {
int digitSize = 0;
while (!number.equals(BigInteger.ZERO)) {
number = number.divide(BigInteger.TEN);
digitSize++;
}
return "10^" + (digitSize - 1);
}
Sono uno più veloce:
public String getWritableNumber(BigInteger number) {
// Takes over 30 seconds for 184948 decimal digits
return "10^" + (number.toString().length() - 1);
}
Questo loop-devide-by-ten approccio è ancora più lento metodi?
Quanto è lento e quanto veloce è necessario? – Kayaman
@Kayaman Il più veloce del 2 richiede oltre 30 secondi per un numero di 184948 cifre decimali. Mi serve meno di 2 secondi. –
2 secondi? Sembra molto il limite di tempo di una competizione di programmazione. – Dukeling