数値の 10 進数の桁数を数える必要があります (例: 1002 の場合は 4)。コードは膨大な数のセットに対して反復処理されるため、O(1) 時間の複雑さでこれを実行し、CPU 時間を大幅に節約したいと考えています。
私は2つの解決策を考え出しました:
- 数がゼロになるまでループで 10 で割ります。ループ回数が答えです。しかし、明らかに O(n) 時間です。
log_base_10(num) + 1
質問: log10 は O(1) ソリューションですか? x86 マシンで glibc を使用してコードを実行しています。それは内部でどのように実装されていますか? そして、これに対するより良い解決策はありますか?