我尝试设计一个函数int smallestDivisibleAfter(int number, int divisor)
,使其返回大于或等于number
的最小数字,该数字可被divisor
整除(非零) )。这里假设所有输入和输出都是非负的。
示例:
smallestDivisibleAfter(9,4); // Returns 12
smallestDivisibleAfter(16,2); // Returns 16
我想出了代码number + divisor - number % divisor
。但是,从那时起number % divisor == 0
smallestDivisibleAfter(16,2); // Returns 18
而不是16
,这种情况就不再起作用了。
此外,number - 1 + divisor - (number - 1)% divisor
不起作用,因为当我将此代码付诸行动时,int
将被unsigned long long
取代。
这里最好的解决方案是什么?
答案 0 :(得分:1)
如果您想避免跳跃,请尝试:
number - number % divisor + divisor * !!(number % divisor)
!!x
只是将数字转换为布尔值,如果为x==0
则为0,否则为1。
答案 1 :(得分:-2)
((number / divisor) + 1) * divisor)
这将在数字后返回除数的下一个最大倍数。
如果您打算使用花车:
floor(number / divisor)
。