Ich muss das erste Vielfache für eine Zahl finden, die von einer Basisnummer ausgeht. Zum Beispiel: Das erste Vielfache von 3 von 7 ist 9. Mein erster Versuch war, dies zu tun:
%Vor% Am Ende wird "multiple" das erste Vielfache von number
nach baseNumber
haben. Das Problem ist, dass wenn number
zu groß wird, die Anzahl der Iterationen zu groß wird. Meine Frage ist also: Gibt es einen schnelleren Weg, dies zu tun?
Wenn alles positiv ist, versuchen Sie
%Vor%Das macht es in konstanter Zeit.
Zuerst fügen wir number - 1
hinzu, um sicherzustellen, dass wir eine Zahl haben, die mindestens so groß ist wie das nächste Vielfache, aber kleiner als die nächste Zahl. Dann subtrahieren wir den Rest der Division um number
, um sicherzustellen, dass wir das gewünschte Vielfache haben.
Wenn baseNumber
negativ sein kann (aber number
immer noch positiv), haben wir das Problem, dass multiple % number
möglicherweise negativ ist, wenn multiple < 0
, also könnte das obige ein Vielfaches von number
überspringen. Um dies zu vermeiden, können wir z. B.
Wenn die Verzweigung zu teuer ist, können wir das if
auf Kosten von zwei Divisionen vermeiden, anstatt eines,
Im Allgemeinen scheint if
jedoch vorzuziehen.
Wenn number
negativ sein kann, ersetzen Sie es zuerst durch seinen absoluten Wert.
Hinweis: Das obige gibt, wie der ursprüngliche Code, baseNumber
zurück, wenn das bereits ein Vielfaches von number
ist. Wenn das nicht erwünscht ist, entferne - 1
in der ersten Zeile.
probiere das (Erfordert INTEGER-Division):
%Vor%7/3 = 2. 3 * (2 + 1) = 9.
Sie haben einen Kantenfall, bei dem baseNumber
bereits ein Vielfaches von number
ist, was Sie mit der Modulo-Operation testen müssen.
Tags und Links c math objective-c