Jeśli wszystko jest gwarancją pozytywny, spróbuj
multiple = baseNumber + number - 1;
multiple -= (multiple % number);
Że robi to w czasie stałym.
Najpierw dodajemy number - 1
, aby upewnić się, że mamy numer co najmniej tak duży jak kolejny numer, ale mniejszy niż kolejny. Następnie odejmujemy resztę podziału przez number
, aby upewnić się, że mamy pożądaną wielokrotność.
Jeśli baseNumber
może być ujemna (ale number
nadal dodatnia), możemy zmierzyć się z problemem, że multiple % number
mogą być ujemne, jeśli multiple < 0
, więc powyższe mógł pominąć wielokrotność number
. Aby tego uniknąć, możemy użyć np.
remainder = multiple % number;
if (remainder < 0) remainder += number;
multiple -= remainder;
Jeżeli rozgałęzienie jest zbyt kosztowne, możemy uniknąć if
kosztem dwóch dywizji zamiast jednego,
multiple -= (number + (multiple % number)) % number;
Generalnie if
wydaje korzystne, choć.
Jeśli wartość number
może być ujemna, należy najpierw zastąpić ją wartością bezwzględną.
Uwaga: Powyższe zwraca, tak jak oryginalny kod, baseNumber
, jeśli jest to już wielokrotność number
. Jeśli nie jest to pożądane, usuń - 1
w pierwszym wierszu.
Możesz być lepiej pytaniem to na Matematyki Stos Exchange. Możesz również chcieć zapewnić jaśniejszą lub bardziej rygorystyczną definicję tego, co masz na myśli przez wielokrotność liczby. – Jim