Was sind die effizientesten Möglichkeiten, die Ziffern einer Zahl zu summieren?

Susan Sarandon
Freigeben: 2024-11-24 01:14:14
Original
225 Leute haben es durchsucht

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

Ziffern einer Zahl summieren: Erkundung effizienter Ansätze

Beim Ziel, die Gesamtsumme der Ziffern in einer numerischen Eingabe zu ermitteln, können verschiedene Methoden verwendet werden beschäftigt sein. Während der anfängliche Instinkt dazu führen kann, einen stringbasierten Ansatz zu verwenden, die Zahl in einen String umzuwandeln und dann mathematische Operationen auf jede einzelne Ziffer anzuwenden, kann diese Methode suboptimal sein.

Eine effizientere Technik liegt in der Manipulation die Zahl als ganze Zahl. Dies kann durch eine While-Schleife erreicht werden, die die Ziffern der Zahl durchläuft, dabei wiederholt die letzte Ziffer extrahiert (mithilfe des Modulo-Operators) und sie zu einer laufenden Summe addiert, während diese Ziffer ausgeschlossen wird (durch Ganzzahldivision). Diese als Modulo-and-Divide-Ansatz bekannte Methode wird im folgenden Codeausschnitt veranschaulicht:

def sum_digits(n):
    s = 0
    while n:
        s += n % 10
        n //= 10
    return s
Nach dem Login kopieren

Zur weiteren Optimierung kann man die Funktion divmod() verwenden, die gleichzeitig Modulo und Integer ausführt Divisionsoperationen:

def sum_digits2(n):
    s = 0
    while n:
        n, remainder = divmod(n, 10)
        s += remainder
    return s
Nach dem Login kopieren

Darüber hinaus kann eine einzelne Zuweisungsanweisung verwendet werden, um die Ausführungsgeschwindigkeit durch die Kombination von Summierung und Division zu verbessern Operationen:

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

Das Benchmarking dieser Ansätze zeigt, dass die Modulo-und-Divide-Methode die String-Manipulationstechniken übertrifft, während sich die Einzelzuweisungsversion als die schnellste Option herausstellt:

%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
Nach dem Login kopieren

Daher Wenn Sie versuchen, die Ziffern einer Zahl effizient zu summieren, ist es ratsam, sich für die Modulo-und-Divide-Technik oder sogar für die Einzelzuweisungsvariante für das Maximum zu entscheiden Leistung.

Das obige ist der detaillierte Inhalt vonWas sind die effizientesten Möglichkeiten, die Ziffern einer Zahl zu summieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage