找出独异于一组数的两个数字
eg:
一个数组中只有两个数字是出现一次,
其他所有数字都出现了两次。
找出这两个只出现一次的数字。
具体代码如下
#include <stdio.h>
#if 1
void findnum(int* src, int n, int* pnum1, int* pnum2) {
int sum = 0;
int i;
for (i = 0; i < n; i++) {
sum ^= src[i];
}
int pos;
for (pos = 0; !(sum & 1 << pos); pos++);
int num1 = 0, num2 = 0;
for (int i = 0; i < n; i++) {
if (src[i] & 1 << pos) {
num1 ^= src[i];
}
else {
num2 ^= src[i];
}
}
*pnum1 = num1;
*pnum2 = num2;
}
int main() {
int num1, num2;
int arr[] = { 5, 3, 9, 1, 7, 5, 4, 7, 4, 2, 9, 2 };
findnum(arr, sizeof(arr) / sizeof(arr[0]), &num1, &num2);
printf("%d,%d", num1, num2);
system("pause");
return 0;
}
#endif