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

更新於:2020年8月5日

149 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告