数字の桁数を見つける方法

高い確率で、すべてのプログラマーに少なくとも1つのそのようなタスクがあったと仮定できます。 桁数を見つけるには多くの方法があります。 この記事では、最も平凡な機能をいくつか紹介しますが、そうではありません。

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.文字列(最悪の結果)

Source: https://habr.com/ru/post/J269237/


All Articles