資訊
大家 好,我正在尋找一種有效的方法來檢查一個數字是否是 5 的倍數。所以我在谷歌上搜索并在 geeksforgeeks.org 上找到了這個解決方案。
我的問題有 3 個解決方案。
- 第一個解決方案是減去 5 直到達到零,
- 第二種解決方案是將數字轉換為字串并檢查最后一個字符為 5 或 0,
- 第三種解決方案是在位級別上進行一些有趣的操作。
我對第三種解決方案感興趣,因為我可以完全理解第一種和第二種。
這是來自 geeksforgeeks 的代碼。
bool isMultipleof5(int n)
{
// If n is a multiple of 5 then we
// make sure that last digit of n is 0
if ( (n & 1) == 1 )
n <<= 1;
float x = n;
x = ( (int)(x * 0.1) ) * 10;
// If last digit of n is 0 then n
// will be equal to (int)x
if ( (int)x == n )
return true;
return false;
}
我只了解部分邏輯。我什至沒有測驗過這段代碼。所以我需要理解它才能自由使用。
如上述文章中所述,如果設定了最后一位,則此函式將數字乘以 2,然后檢查最后一位是否為 0,并在這種情況下回傳 true。但是在檢查了數字的二進制表示后,我感到困惑,因為在任何奇數的情況下最后一位為 1,在任何偶數的情況下最后一位為 0。所以...
實際問題是
這個函式的邏輯是什么?
任何答案表示贊賞!
謝謝大家!
uj5u.com熱心網友回復:
- 檢查一個數字是否是 5 的倍數的最直接方法是簡單地
if (n % 5 == 0) {
// logic...
}
位操作代碼的作用是:
- 如果數字是奇數,則將其乘以 2。請注意,對于 5 的倍數,個位將以 0 或 5 結尾,將數字加倍將使其以 0 結尾。
- 我們創建了一個設定為 n 的數字 x,但個位數設定為 0。(我們通過將 n 乘以 0.1 來洗掉個位數,然后乘以 10 以添加一個 0,它具有僅將個位更改為 0 的總效果)。
- 我們知道,最初,如果 n 是 5 的倍數,那么在步驟 1 之后它的個位將為 0。所以我們檢查 x 是否等于它,如果是,那么我們可以說 n 是 5 的倍數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420780.html
標籤:
