c++ - 如何将一个数字四舍五入为另一个数字的倍数?

标签 c++ algorithm modulo integer-division

<分区>

我正在尝试设计一个函数 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);//返回 18 而不是 16

此外,number - 1 + divisor - (number - 1)% divisor 不起作用,因为 int 将被替换为 unsigned long long 当我将这段代码付诸行动时。

这里最好的解决方案是什么?

最佳答案

如果你想避免跳跃,试试:

number - number % divisor + divisor * !!(number % divisor)

!!x 只是将数字转换为 bool 值,如果 x==0 则为 0,否则为 1。

关于c++ - 如何将一个数字四舍五入为另一个数字的倍数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36561456/

相关文章:

javascript - Javascript 中大量数字的模运算符不准确

c++ - 如何在 C++ 中查找大数模 1000000007 的阶乘?

c++ - 整数的模数

c++ - 初始化类的私有(private)成员变量

c++ - 初始化 constexpr - "illegal initialization of ' constexpr' 具有非常量表达式的实体”

algorithm - 对数组中的一对元素进行操作并删除一个

algorithm - 我有一个集合,其中包含每个集合元素的值,并且我希望按值将元素尽可能均匀地分布在 N block 上

c++ - 带有Qt 4.8.5的Netbeans 7.3.1-无法编译

C++ - 避免使用多个 if 语句来管理错误

java - 求解三个数组元素的最大乘积而不排序