すべてが正であることが保証されている場合は、試してください
multiple = baseNumber + number - 1;
multiple -= (multiple % number);
それは一定の時間でそれを行います。
number - 1
最初に、少なくとも次の倍数と同じ大きさで、その次の倍数よりも小さい数があることを確認するために加算します。number
次に、目的の倍数になるように、除算の残りを減算します。
ifbaseNumber
が負になる可能性がある (それでも正である) 場合、 if が負になる可能性があるnumber
という問題に直面するため、上記は の倍数をスキップする可能性があります。それを避けるために、例えば使用することができますmultiple % number
multiple < 0
number
remainder = multiple % number;
if (remainder < 0) remainder += number;
multiple -= remainder;
分岐が高すぎる場合はif
、1 つではなく 2 つの分割を犠牲にして回避できます。
multiple -= (number + (multiple % number)) % number;
ただし、一般的には、if
が好ましいようです。
負になる可能性がある場合number
は、最初にその絶対値に置き換えます。
注: 上記は、元のコードと同様に、baseNumber
それが既に の倍数である場合に戻りますnumber
。- 1
それが望ましくない場合は、最初の行の を削除します。