예를 들어 num이라는 정수가 주어지고 작업은 num과의 XOR이 XOR 값보다 큰 값을 생성하는 num보다 작은 수를 세는 것입니다.
XOR 연산의 진리표는 다음과 같습니다.
A | B | XOR B |
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
입력 - 정수 숫자 =11
출력 − n과의 XOR이 더 큰 값을 생성하는 더 작은 수의 개수는 − 4
입니다.설명 -
num은 11로 주어지며, 이는 num보다 작은 숫자로 num의 XOR을 찾아야 함을 의미합니다. 따라서 숫자는 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(참), 7 XOR 11> 11(참), 8 XOR 11<11(거짓), 9 XOR 11 <11(거짓), 10 XOR 11 <11(거짓).
입력 - 정수 숫자 =12
출력 − n과의 XOR이 더 큰 값을 생성하는 더 작은 수의 개수는 − 3
입니다.설명 -
num은 12로 주어지며, 이는 num보다 작은 숫자로 num의 XOR을 찾아야 함을 의미합니다. 따라서 숫자는 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(거짓), 7 XOR 12<12(거짓), 8 XOR 12<12(거짓), 9 XOR 12 <12(거짓), 10 XOR 12 <12(거짓), 11 XOR 12 <12( 거짓).
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
-
정수 요소를 입력하고 num이라는 변수에 저장합니다.
-
추가 처리를 위해 num 값을 함수에 전달합니다.
-
결과를 저장할 임시 변수 개수를 만듭니다.
-
num> 0
까지 WHILE 루프 시작 -
루프 내에서 IF num &1 ==TRUE를 확인한 다음 count를 count + pow(2, temp)
로 설정합니다. -
temp 값을 1 증가
-
그리고 num을 num으로 설정>> =1
-
개수 반환
-
결과 인쇄
예시
#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