#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 ",arr[i]); // 2,3,7 2 = (10) 3 = (11) 7 = (111) *k1 ^= arr[i]; } else { printf("2---%d ",arr[i]); // 1,4,9 1 = (1) 4 = (100) 9 = (1001) *k2 ^= arr[i]; } } printf("singleTwo: %d,%d ",*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 ",single); getSingleTwo(arrTwo,sizeof(arrTwo)/sizeof(int),&k1,&k2); return 0; }