2013-06-30 104 views
0

我正在研究一個小算法,實際上是一個數學函數,我必須找到一個數字,同時以另一個數字加倍開始。找到一個數字的範圍

例如,我必須找到206的範圍內,而從8開始,它即

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

倍增在某一點已找到206之前最接近的數字,然後添加進一步8爲該值將是必需的。

有沒有可以直接使用的統計或數學公式?

+0

冒着聽起來天真的風險..你是要求'[floor(206/8)* 8,ceil(206/8)* 8]' – Ioannis

+0

@loannis我想是的,我只是回答說如果你看密切。 – 2013-06-30 20:30:54

+0

@ H2CO3對不起,我沒有刷新頁面 - 點! – Ioannis

回答

3

是的,它被稱爲整數除法。

result_lo = floor(206/8) * 8 
result_hi = (floor(206/8) + 1) * 8 
+0

這很棒..謝謝@ H2CO3 ...看起來好像給結果。 –

+0

@FarrukhWheheed:你知道它爲什麼給出結果嗎? – Aravind

+0

那麼,我很有興趣知道這一點。但是請閱讀它的內在方面以及那裏可怕的數學。即http://www.encyclopediaofmath.org/index.php/Floor_function –

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的數,然後就可以簡單地使用整數除法在C++中。這是因爲,當您在C++中執行整數除法時,結果會被截斷。

也就是說8/3將被設置爲2

雖然8/3是2.66,結果只有整數part.The小數部分被忽略。(這只是一個簡單的解釋,對於負整數,你需要遵循)因此,在C++

,可以簡單的寫:

((N)/8)*8 

請不要隨便使用的東西,因爲它的工作原理,試圖找出爲什麼它的作品!

+1

@Farrukh Waheed,基於Aravind的最後一句話: 如果你不明白它爲什麼起作用,那麼你就不知道它是否真的有效。它只是在你測試它的情況下做你想做的事情,那就是所有.. – Ioannis

+0

非常感謝Aravind對於這樣的細節......我肯定會在這個時候繼續工作,因爲我現在在這個時候沉迷於其他任務..真的很感謝。 –

相關問題