我正在研究一种小算法,实际上是一种数学函数,我必须在其中找到一个数字,同时从另一个数字加倍。
例如,我必须找到206的范围,而从8开始加倍,即。
8 + 8 -> 16 + 8 -> 24 + 8 -> 32 ...
在某些时候必须在206之前找到最接近的数字,然后再添加8到该值。
我可以直接使用任何统计或数学公式吗?
答案 0 :(得分:3)
是的,它被称为整数除法。
result_lo = floor(206 / 8) * 8
result_hi = (floor(206 / 8) + 1) * 8
答案 1 :(得分:2)
由于您在理解地板方面遇到困难,请允许我简要介绍一下。
floor(x) = the greatest integer less than or equal to x
所以
floor(2.99) = 2
floor(2.00) = 2
floor(-0.99) = -1
为什么楼层(N / 8)* 8有效?
我们希望8的最大倍数小于或等于N?
所以我们希望尽可能多地移除8个,直到它大于0。
206-8-8-8-8-8 -.... 8 = 6
除此之外,如果我们减去8,它就会低于0.所以我们就此止步。
一个重要的观察是划分只是重复减法。
这意味着划分206/8给出了可以从206中减去的8的数量。
当输入数量限制为正数时,您可以简单地在C ++中使用整数除法。这是因为,当您在C ++中执行整数除法时,结果将被截断。
即8/3将设为2。
虽然8/3是2.66,但结果只是整数部分。简单地忽略了小数部分。(这只是一个简单的解释,对于负整数,你需要遵循)
所以在C ++中,你可以简单地写:
((N)/8)*8
请不要只是使用某些东西,因为它有效,试着找出它的工作原理!