2017-04-14 16 views
-5

그 자체로 n 번 k를 XOR하고 싶습니다. 가장 쉬운 방법은 루프 내에서 n 번 반복하는 것입니다. 더 좋은 방법이 있습니까?같은 번호를 XOR하는 방법은 무엇입니까?

int t = k; 
for(int i = 0; i < n; i++) k = k^t; 
+6

'(n % 2 == 1)? k : 0 '이다. – user2357112

+2

잠시만 기다려주십시오. 코드가 영어와 일치하지 않습니다. 당신은 자신과 XOR k하고 싶다고하지만, 당신의 코드는 그것을 다른 숫자와 XOR합니다. – user2357112

+0

편집 된 질문 –

답변

3

XORing N 개의 K 사본은 N이 홀수이면 K를 생성하고 N이 짝수이면 0을 생성합니다. K^K == 0, 0^K == K, 모든 추가 K와 함께 그 결과가 번갈아 바뀝니다. (귀하의 코드는 현재 n + 1 개의 k 사본을 XOR하여 실수로 추측합니다.)

int result = (n % 2 == 1) ? k : 0; 
0

0의 숫자 결과의 XOR's의 짝수 : 해당 번호에 숫자 결과의 XOR'sk^k = 0
홀수 : 따라서 k^k^k = k

, 당신은 자신하지 XOR the number 필요 n 횟수를 최종 결과를 확인하십시오.
실제로 XOR을 전혀 할 필요가 없습니다. n이 짝수 또는 홀수인지 확인하십시오.

return (n & 1) == 0 ? 0 : k 

even even (n & 1) = 0 | 이상한 경우 (n & 1) = 1