c/c++语言开发共享快速找到下一个数字的倍数

我需要找到从基数开始的数字的第一个倍数。 例如: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即将出现在这里。

      以上就是c/c++开发分享快速找到下一个数字的倍数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/562156.html

      (0)
      上一篇 2021年2月4日
      下一篇 2021年2月4日

      精彩推荐