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

Susan Sarandon
Release: 2024-11-24 01:14:14
Original
198 people have browsed it

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

Summating Digits of a Number: Exploring Efficient Approaches

When aiming to ascertain the total sum of digits in a numerical input, various methodologies can be employed. While initial instinct may lead to utilizing a string-based approach, converting the number to a string and then applying mathematical operations on each individual digit, this method can be sub-optimal.

A more efficient technique lies in manipulating the number as an integer. This can be achieved through a while loop that iterates through the digits of the number, repeatedly extracting the last digit (using the modulo operator) and adding it to a running total while excluding that digit (through integer division). This method, known as the modulo-and-divide approach, is exemplified in the following code snippet:

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

For further optimization, one can employ the divmod() function, which simultaneously performs the modulo and integer division operations:

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

Furthermore, a single assignment statement can be utilized to improve execution speed by combining the summation and division operations:

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

Benchmarking these approaches reveals that the modulo-and-divide method outperforms the string manipulation techniques, while the single assignment version emerges as the swiftest option:

%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
Copy after login

Therefore, when seeking to efficiently sum the digits of a number, it is advisable to opt for the modulo-and-divide technique or even the single assignment variant for maximum performance.

The above is the detailed content of What are the most efficient ways to sum the digits of a number?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template