#include <stdio.h>
//数组当中只出现一次的那个数
int getSingle(int* arr,int len){
int single = 0,i;
if(len == 1) return *arr;
for(i=0;i<len;i++) single ^= arr[i];
return single;
}
//数组当中只出现一次的两个数
void getSingleTwo(int*arr,int len,int* k1,int* k2){
int diff = getSingle(arr,len);
diff &= -diff;
int i = 0;
for(;i<len;i++){
if(arr[i]&diff) {
printf("1---%d\n",arr[i]); // 2,3,7 2 = (10) 3 = (11) 7 = (111)
*k1 ^= arr[i];
} else {
printf("2---%d\n",arr[i]); // 1,4,9 1 = (1) 4 = (100) 9 = (1001)
*k2 ^= arr[i];
}
}
printf("singleTwo: %d,%d\n",*k1,*k2);
}
int main () {
int arr[] = {1,2,3,4,5,4,3,2,1};
int arrTwo[] = {1,2,3,4,7,9,4,3,2,1};
int k1 = 0,k2 = 0;
int single = getSingle(arr,sizeof(arr)/sizeof(int));
printf("single = %d\n",single);
getSingleTwo(arrTwo,sizeof(arrTwo)/sizeof(int),&k1,&k2);
return 0;
}