快速找到下一个数字的倍数

我需要找到从基数开始的数字的第一个倍数。 例如:7的3的第一个倍数是9.我的第一次尝试是这样做:

multiple = baseNumber while(multiple%number !=0 ) multiple++ 

最后,“multiple”将具有baseNumber之后的第一个number baseNumber 。 问题是当number变得太大时,迭代次数变得太多。 所以我的问题是:有更快的方法吗?

如果一切都保证是积极的,试试吧

 multiple = baseNumber + number - 1; multiple -= (multiple % number); 

这是在恒定的时间。

首先,我们添加number - 1 ,以确保我们的数字至少与下一个数字一样大,但小于之后的数字。 然后我们用number减去除法的余number ,以确保我们有所需的倍数。

如果baseNumber可以是负数(但number仍然是正数),我们将面临如果multiple < 0multiple < 0 multiple % number可能为负的问题,因此上面的number可以跳过多个number 。 为避免这种情况,我们可以使用例如

 remainder = multiple % number; if (remainder < 0) remainder += number; multiple -= remainder; 

如果分支过于昂贵,我们可以避免使用两个分区而不是一个分区,

 multiple -= (number + (multiple % number)) % number; 

一般来说, if似乎更可取。

如果number可以为负数,请先将其替换为绝对值。

注意:上面的返回值与原始代码一样,如果已经是number的倍数,则返回baseNumber 。 如果不需要,请删除第一行中的- 1

试试这个(需要INTEGER部门):

 multiple = ((base/number) + 1) * number; 

7/3 = 2. 3 *(2 + 1)= 9。

您有一个边缘情况,其中baseNumber已经是数字的倍数,您必须使用模数运算进行测试。

你为什么需要循环?

multiple =(floor(number / baseNumber)+1)* baseNumber

  while(multiple * number < baseNumber) multiple++; 

所以对于baseNumber = 3,number = 7,你的倍数是3;

但有些东西告诉我bignums即将出现在这里。