Si todo está garantizado para ser positivo, tratar
multiple = baseNumber + number - 1;
multiple -= (multiple % number);
que lo hace en un tiempo constante.
Primero, agregamos number - 1
para asegurarnos de tener un número al menos tan grande como el siguiente pero más pequeño que el siguiente. Luego restamos el resto de la división al number
para asegurarnos de tener el múltiplo deseado.
Si baseNumber
puede ser negativo (pero number
siendo positiva), nos enfrentamos al problema de que multiple % number
puede ser negativo si multiple < 0
, por lo que lo anterior podría saltar un múltiplo de number
. Para evitar eso, podemos usar, p.
remainder = multiple % number;
if (remainder < 0) remainder += number;
multiple -= remainder;
Si ramificación es demasiado caro, podemos evitar la if
a costa de dos divisiones en lugar de uno,
multiple -= (number + (multiple % number)) % number;
general, el if
parece preferible, sin embargo.
Si number
puede ser negativo, sustitúyalo primero con su valor absoluto.
Nota: Lo anterior devuelve, como lo hace el código original, baseNumber
si eso ya es un múltiplo de number
. Si no se desea, elimine el - 1
en la primera línea.
Usted puede ser mejor pedir esto en la pila Cambio de Matemáticas. También es posible que desee proporcionar una definición más clara o más rigurosa de lo que quiere decir con múltiples de un número. – Jim