首頁  >  文章  >  後端開發  >  對數字進行求和的最有效方法是什麼?

對數字進行求和的最有效方法是什麼?

Susan Sarandon
Susan Sarandon原創
2024-11-24 01:14:14227瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn