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
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
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
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
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!