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