C++中計算與n異或結果更大的較小數字個數
給定一個整數,例如num,任務是計算小於num的較小數字個數,這些數字與num的異或結果大於該異或值。
異或運算的真值表如下所示
| A | B | A XOR B |
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 1 | 0 |
輸入 − 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
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP