C++中計算與n異或結果更大的較小數字個數


給定一個整數,例如num,任務是計算小於num的較小數字個數,這些數字與num的異或結果大於該異或值。

異或運算的真值表如下所示

ABA XOR B
000
101
011
110

輸入 − int num = 11

輸出 − 與n異或結果更大的較小數字個數為 − 4

解釋

給定num為11,這意味著我們需要找到num與小於num的數字的異或結果。這些數字是1 XOR 11 < 11(FALSE), 2 XOR 11 < 11(FALSE), 3 XOR 11 < 11(FALSE), 4 XOR 11 > 11(TRUE), 5 XOR 11 > 11(TRUE), 6 XOR 11 > 11(TRUE), 7 XOR 11 > 11(TRUE), 8 XOR 11 < 11(FALSE), 9 XOR 11 < 11(FALSE), 10 XOR 11 < 11(FALSE).

輸入 − int num = 12

輸出 − 與n異或結果更大的較小數字個數為 − 3

解釋

給定num為12,這意味著我們需要找到num與小於num的數字的異或結果。這些數字是1 XOR 12 > 12(TRUE), 2 XOR 12 > 12(TRUE), 3 XOR 12 > 12(TRUE), 4 XOR 12 < 12(FALSE), 5 XOR 12 < 12(FALSE), 6 XOR 12 < 12(FALSE), 7 XOR 12 < 12(FALSE), 8 XOR 12 < 12(FALSE), 9 XOR 12 < 12(FALSE), 10 XOR 12 < 12(FALSE), 11 XOR 12 < 12(FALSE).

下面程式中使用的演算法如下

  • 輸入一個整數元素並將其儲存在一個名為num的變數中。

  • 將num的值傳遞給函式進行進一步處理

  • 建立一個臨時變數count來儲存結果。

  • 當num > 0時啟動迴圈WHILE

  • 在迴圈內,檢查IF num & 1 == TRUE,則將count設定為count + pow(2, temp)

  • 將temp的值加1

  • 並將num設定為num >> = 1

  • 返回count

  • 列印結果

示例

 線上演示

#include
using namespace std;
//Count smaller numbers whose XOR with n produces greater value
int XOR_greater(int n){
   int temp = 0;
   int count = 0;
   while (n > 0){
      if ((n&1) == 0){
         count += pow(2, temp);
      }
      temp++;
      n >>= 1;
   }
   return count;
}
int main(){
   int n = 20;
   cout<<"Count of smaller numbers whose XOR with n produces greater value are: "<<XOR_greater(n) << endl;
   return 0;
}

輸出

如果執行上述程式碼,它將生成以下輸出:

Count of smaller numbers whose XOR with n produces greater value are: 11

更新於:2020年8月31日

88 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.