Home Backend Development Python Tutorial What are the most efficient ways to sum the digits of a number?

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

Nov 24, 2024 am 01:14 AM

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!

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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to avoid being detected by the browser when using Fiddler Everywhere for man-in-the-middle reading? How to avoid being detected by the browser when using Fiddler Everywhere for man-in-the-middle reading? Apr 02, 2025 am 07:15 AM

How to avoid being detected when using FiddlerEverywhere for man-in-the-middle readings When you use FiddlerEverywhere...

How to solve permission issues when using python --version command in Linux terminal? How to solve permission issues when using python --version command in Linux terminal? Apr 02, 2025 am 06:36 AM

Using python in Linux terminal...

How to teach computer novice programming basics in project and problem-driven methods within 10 hours? How to teach computer novice programming basics in project and problem-driven methods within 10 hours? Apr 02, 2025 am 07:18 AM

How to teach computer novice programming basics within 10 hours? If you only have 10 hours to teach computer novice some programming knowledge, what would you choose to teach...

How to get news data bypassing Investing.com's anti-crawler mechanism? How to get news data bypassing Investing.com's anti-crawler mechanism? Apr 02, 2025 am 07:03 AM

Understanding the anti-crawling strategy of Investing.com Many people often try to crawl news data from Investing.com (https://cn.investing.com/news/latest-news)...

Python 3.6 loading pickle file error ModuleNotFoundError: What should I do if I load pickle file '__builtin__'? Python 3.6 loading pickle file error ModuleNotFoundError: What should I do if I load pickle file '__builtin__'? Apr 02, 2025 am 06:27 AM

Loading pickle file in Python 3.6 environment error: ModuleNotFoundError:Nomodulenamed...

What is the reason why pipeline files cannot be written when using Scapy crawler? What is the reason why pipeline files cannot be written when using Scapy crawler? Apr 02, 2025 am 06:45 AM

Discussion on the reasons why pipeline files cannot be written when using Scapy crawlers When learning and using Scapy crawlers for persistent data storage, you may encounter pipeline files...

See all articles