Maison > développement back-end > Tutoriel Python > Quelles sont les façons les plus efficaces de additionner les chiffres d'un nombre ?

Quelles sont les façons les plus efficaces de additionner les chiffres d'un nombre ?

Susan Sarandon
Libérer: 2024-11-24 01:14:14
original
303 Les gens l'ont consulté

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

Sommation des chiffres d'un nombre : exploration d'approches efficaces

Lorsque l'on cherche à déterminer la somme totale des chiffres dans une entrée numérique, diverses méthodologies peuvent être employé. Bien que l'instinct initial puisse conduire à utiliser une approche basée sur des chaînes, à convertir le nombre en chaîne puis à appliquer des opérations mathématiques sur chaque chiffre individuel, cette méthode peut s'avérer sous-optimale.

Une technique plus efficace consiste à manipuler le nombre sous forme d'entier. Ceci peut être réalisé grâce à une boucle while qui parcourt les chiffres du nombre, extrayant à plusieurs reprises le dernier chiffre (à l'aide de l'opérateur modulo) et l'ajoutant à un total cumulé tout en excluant ce chiffre (par division entière). Cette méthode, connue sous le nom d'approche modulo-and-divide, est illustrée dans l'extrait de code suivant :

def sum_digits(n):
    s = 0
    while n:
        s += n % 10
        n //= 10
    return s
Copier après la connexion

Pour une optimisation plus poussée, on peut utiliser la fonction divmod(), qui effectue simultanément les fonctions modulo et entière. opérations de division :

def sum_digits2(n):
    s = 0
    while n:
        n, remainder = divmod(n, 10)
        s += remainder
    return s
Copier après la connexion

De plus, une seule instruction d'affectation peut être utilisée pour améliorer la vitesse d'exécution en combinant la sommation et la division opérations :

def sum_digits3(n):
   r = 0
   while n:
       r, n = r + n % 10, n // 10
   return r
Copier après la connexion

L'analyse comparative de ces approches révèle que la méthode modulo-and-divide surpasse les techniques de manipulation de chaînes, tandis que la version à affectation unique apparaît comme l'option la plus rapide :

%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
Copier après la connexion

Par conséquent , lorsque l'on cherche à additionner efficacement les chiffres d'un nombre, il est conseillé d'opter pour la technique modulo-division ou même la variante à affectation unique pour des performances maximales.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal