C++ 中的範圍按位與(或 &)
在這個問題中,我們得到了兩個整數值 a 和 b。我們的任務是找到 **從 a 到 b 的範圍的按位與 (&)**。這意味著我們必須找到 a & a+1 & a+2 & … b-1 & b 的值。
讓我們舉個例子來理解這個問題:
**輸入** − a = 3 , b = 8
**輸出** − 0
**解釋** − 3 & 4 & 5 & 6 & 7 & 8 = 0
為了解決這個問題,一個簡單的解決方案是從 a 開始,透過增加 1 到 b 來找到所有數字的按位與。
更有效的解決方案:
這是一個更有效的解決方案,可以使用以下方法:
**步驟 1** − 反轉 b 的最低有效位 (LSB)。
**步驟 2** − 將該數字與 a 和 b 進行比較,檢查它是否在範圍內:
**步驟 2.1** − 如果數字大於 a,則再次反轉其 LSB。
**步驟 2.2** − 如果它不大於 a,則數字 = 結果。
現在,讓我們看看上面的演算法是如何工作的:
**示例** − a = 3 和 b = 8。
**解決方案** −
**步驟 1** − b = 8 (1000),反轉 LSB(這是數字中唯一的位)。該數字變為 0000,即 0。
**步驟 2** − 0 小於 3,0 是結果。
示例
現在,讓我們看看解決這個問題的程式碼:
#include <stdio.h> int main(){ long a, b; a = 3; b = 8; do{ b -= (b & -b); }while(a < b); printf("%li", b); }
輸出
0
廣告