1、数组中只出现一次的数字
#include<iostream>
using namespace std;
int findFirstBitIs1(int num)
{
int index = 0;
while( ((num & 1)==0) && (index<8*sizeof(int)) )
{
num = num>>1;
index++;
}
return index;
}
int isBit1(int num,int index)
{
num = num>>index;
return (num&1);
}
void findNumAppareOnce(int data[],int len, int *num1, int *num2)
{
if(data==NULL||len<2)
return;
int num = 0;
for(int i = 0; i<len; i++)
{
num ^=data[i];
}
int indexOf1 = findFirstBitIs1(num);
*num1 = *num2 = 0;
for(int j = 0; j<len; j++)
{
if(isBit1(data[j],indexOf1))
{
*num1 ^= data[j];
}
else
{
*num2 ^=data[j];
}
}
}
int main()
{
int data[] = {2,4,3,6,3,2,5,5};
int num1,num2;
findNumAppareOnce(data,8,&num1,&num2);
printf("%d %d\n",num1,num2);
return 0;
}