はじめに
正の整数の桁数を求める代表的なアルゴリズムをいくつか紹介します。
1. 常用対数を利用する
もっともスマートなのは、常用対数を利用する方法です。
def digit_count(n: int) -> int:
import math
return math.floor(math.log10(n)) + 1
2. ループを利用する
常用対数を求めるAPIがない場合は、整数を10で割っていき、何回割れるかを数えます。計算量はO(桁数)
となり、十分に高速です。
def digit_count(n: int) -> int:
if n == 0:
return 1
count = 0
while n > 0:
n //= 10
count += 1
return count
3. 文字列変換を利用する
この方法はナイーブでわかりやすく、桁数が小さい場合には問題なく動作します。ただし、桁数が大きくなると、次のような理由から想定通りに動作しないことがあります。
- 数値から文字列への変換にオーバーヘッドがあり、処理に時間がかかる
- メモリを大量に消費し、場合によってはメモリ不足(Out of Memory)が発生する可能性がある
def digit_count(n: int) -> int:
return len(str(n))
Comments
Let's comment your feelings that are more than good