Home  >  Article  >  Backend Development  >  What\'s the Most Efficient Way to Sum a Number\'s Digits?

What\'s the Most Efficient Way to Sum a Number\'s Digits?

Barbara Streisand
Barbara StreisandOriginal
2024-11-24 01:00:11300browse

What's the Most Efficient Way to Sum a Number's Digits?

Sum the Digits of a Number: An Efficient Approach

To find the sum of the digits in a number, the most efficient approach is to utilize purely integer operations. The following Python code showcases this technique:

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

Here, we repeatedly apply modulo 10 to extract the rightmost digit and add it to the sum. By integer-dividing by 10, we shift to the next digit.

An even faster version uses a single assignment statement:

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

Speed comparisons indicate that using integer operations is significantly faster than converting the number to a string and using string manipulation.

%timeit sum_digits(n)  # Pure integer operations
1000000 loops, best of 3: 479 ns per loop

%timeit sum_digits2(n)  # Integer operations with divmod
1000000 loops, best of 3: 716 ns per loop

%timeit sum(map(int, str(n)))  # String manipulation
1000000 loops, best of 3: 1.42 us per loop

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

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

Therefore, utilizing integer operations is the most efficient approach for summing the digits of a number.

The above is the detailed content of What\'s the Most Efficient Way to Sum a Number\'s Digits?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn