Ich versuche, eine Funktion int smallestDivisibleAfter(int number, int divisor)
so zu entwerfen, dass es die kleinste Zahl größer als oder gleich number
zurückgibt, die durch divisor
teilbar ist (die nicht Null ist). Hier wird angenommen, dass alle Eingaben und Ausgaben nicht negativ sind.Wie wird eine Nummer zu einem Vielfachen einer anderen Nummer aufgerundet?
Beispiele:
smallestDivisibleAfter(9,4); // Returns 12
smallestDivisibleAfter(16,2); // Returns 16
kam ich number + divisor - number % divisor
mit dem Code auf. Dies hört jedoch auf zu funktionieren, wenn number % divisor == 0
, seitdem smallestDivisibleAfter(16,2); // Returns 18
anstelle von 16
.
Außerdem funktioniert number - 1 + divisor - (number - 1)% divisor
nicht, da int
durch unsigned long long
ersetzt wird, wenn ich diesen Code in die Tat umsetzen.
Was ist die beste Lösung hier?
'Teiler * ((Zahl/Teiler) + (Zahl% Divisor? 1: 0))'? – m69
'(Zahl + Divisor - 1)/Divisor * Divisor'? – AlexD
Ihre Frage stimmt nicht mit Ihrem Beispiel überein - 18 ist die "kleinste Zahl größer als 16, die durch 2 teilbar ist" und 16 nicht. –