1.ストリングの長さ
かなり一般的な方法は、文字列の長さを見つけることです。 これは最速の方法ではありませんが、非常に単純なタスクに適しています。
public int getCountsOfDigits(long number) { return String.valueOf(Math.abs(number)).length(); }
2.分割サイクル
一般的な方法で、速度は数値の長さに線形に依存します。
public int getCountsOfDigits(long number) { int count = (number == 0) ? 1 : 0; while (number != 0) { count++; number /= 10; } return count; }
3. 10進数の対数と丸め
対数は一定の時間に対して機能し、その利点は大きな数にあります。
public static int getCountsOfDigits(long number) { return(number == 0) ? 1 : (int) Math.ceil(Math.log10(Math.abs(number) + 0.5)); }
Math.ceilのみが対数を使用するためのオプションの1つであるだけでなく、使用できます。
4.比較
intのみのコード量のために、迅速ですが実用的ではない方法で、38行かかりました。 もちろん、より美しく、より理解しやすい職人もいます。 コードは長く残さないで、intのままにしますが、原理は明確だと思います。
コード
public static int getCountsOfDigits(int n) { if (n < 100000) { if (n < 100) { if (n < 10) { return 1; } else { return 2; } } else { if (n < 1000) { return 3; } else { if (n < 10000) { return 4; } else { return 5; } } } } else { if (n < 10000000) { if (n < 1000000) { return 6; } else { return 7; } } else { if (n < 100000000) { return 8; } else { if (n < 1000000000) { return 9; } else { return 10; } } } } }
評価は次のようになります。
1.比較(最良の結果を表示)
2.対数
3.部門
4.文字列(最悪の結果)