查找数字的范围

时间:2013-06-30 20:23:16

标签: algorithm range

我正在研究一种小算法,实际上是一种数学函数,我必须在其中找到一个数字,同时从另一个数字加倍。

例如,我必须找到206的范围,而从8开始加倍,即。

8 + 8 -> 16 + 8 -> 24 + 8 -> 32 ...

在某些时候必须在206之前找到最接近的数字,然后再添加8到该值。

我可以直接使用任何统计或数学公式吗?

2 个答案:

答案 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

请不要只是使用某些东西,因为它有效,试着找出它的工作原理!