ホームページ  >  記事  >  バックエンド開発  >  数値の桁を合計する最も効率的な方法は何ですか?

数値の桁を合計する最も効率的な方法は何ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-24 01:14:14201ブラウズ

What are the most efficient ways to sum the digits of a number?

数値の桁の合計: 効率的なアプローチの探索

数値入力の桁の合計を確認することを目的とする場合、さまざまな方法論を使用できます。雇用される。最初は直感的に文字列ベースのアプローチを利用し、数値を文字列に変換してから個々の数字に数学的演算を適用するかもしれませんが、この方法は最適とは言えない可能性があります。

より効率的な手法は、整数としての数値。これは、数字の桁を反復処理し、(モジュロ演算子を使用して) 最後の桁を繰り返し抽出し、その桁を (整数除算によって) 除外しながら累計に加算する while ループによって実現できます。モジュロと除算のアプローチとして知られるこの方法は、次のコード スニペットに例示されています。

def sum_digits(n):
    s = 0
    while n:
        s += n % 10
        n //= 10
    return s

さらに最適化するには、モジュロと整数の計算を同時に実行する divmod() 関数を使用できます。除算演算:

def sum_digits2(n):
    s = 0
    while n:
        n, remainder = divmod(n, 10)
        s += remainder
    return s

さらに、単一の代入ステートメントを利用して、以下を組み合わせることで実行速度を向上させることができます。合計と除算の演算:

def sum_digits3(n):
   r = 0
   while n:
       r, n = r + n % 10, n // 10
   return r

これらのアプローチのベンチマークを行うと、剰余除算法が文字列操作手法よりも優れていることがわかりますが、単一代入バージョンが最も迅速なオプションとして浮上しています:

%timeit sum_digits(n)
1000000 loops, best of 3: 574 ns per loop

%timeit sum_digits2(n)
1000000 loops, best of 3: 716 ns per loop

%timeit sum_digits3(n)
1000000 loops, best of 3: 479 ns per loop

%timeit sum(map(int, str(n)))
100000 loops, best of 3: 1.42 us per loop

%timeit sum([int(digit) for digit in str(n)])
100000 loops, best of 3: 1.52 us per loop

%timeit sum(int(digit) for digit in str(n))
100000 loops, best of 3: 2.04 us per loop

したがって、数値の桁を効率的に合計したい場合は、モジュロと除算を選択することをお勧めします。最大のパフォーマンスを実現するためのテクニック、または単一割り当てのバリアントさえも使用できます。

以上が数値の桁を合計する最も効率的な方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。