首页  >  文章  >  后端开发  >  对数字进行求和的最有效方法是什么?

对数字进行求和的最有效方法是什么?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn