小数点以下の桁数はBigInteger
です。たとえば、次のようにBigInteger:スケーラブルメソッドの小数点以下の桁数をカウントする
99
戻り、私は184948
ドとBigInteger
このを行う必要があり2
1234
戻り4
9999
戻り4
123456789
戻り20
桁数字など。 これを迅速かつスケーラブルにするにはどうすればよいですか?
変換ツー文字列アプローチは遅いです:
public String getWritableNumber(BigInteger number) {
// Takes over 30 seconds for 184948 decimal digits
return "10^" + (number.toString().length() - 1);
}
このループdevide・バイ・10アプローチはさらに遅いです:
public String getWritableNumber(BigInteger number) {
int digitSize = 0;
while (!number.equals(BigInteger.ZERO)) {
number = number.divide(BigInteger.TEN);
digitSize++;
}
return "10^" + (digitSize - 1);
}
も速くあります方法?
どのくらい遅く、どのくらい速くする必要がありますか? – Kayaman
@ Kayaman 2の中では、184948の10進数の数が30秒以上になります。私は2秒未満にする必要があります。 –
2秒?これはプログラミング競争の時間制限とよく似ています。 – Dukeling