pair<int,int> find_appear_once(const int data[],int size) {
int xor_two = 0;
int i;
for (i=0;i<size;++i) {
xor_two ^= data[i];
}
///*
int flag = 0x01;
while ((flag & xor_two) == 0)
flag <<= 1;
//*/
//int flag = xor_two & -(unsigned int)xor_two;
int xor_a = 0;
for(i=0;i<size;++i) {
if(data[i] & flag)
xor_a ^= data[i];
}
return pair<int,int>(xor_a,(xor_a^xor_two));
}
int main()
{
int array[]={1,1,2,2,-3,4,4,5,5,6,6,7,7,8,8,9,9,-13};
pair<int,int> res = find_appear_once(array,sizeof(array)/sizeof(array[0]));
cout<<res.first<<"\t"<<res.second<<endl;
return 0;
}
int xor_two = 0;
int i;
for (i=0;i<size;++i) {
xor_two ^= data[i];
}
///*
int flag = 0x01;
while ((flag & xor_two) == 0)
flag <<= 1;
//*/
//int flag = xor_two & -(unsigned int)xor_two;
int xor_a = 0;
for(i=0;i<size;++i) {
if(data[i] & flag)
xor_a ^= data[i];
}
return pair<int,int>(xor_a,(xor_a^xor_two));
}
int main()
{
int array[]={1,1,2,2,-3,4,4,5,5,6,6,7,7,8,8,9,9,-13};
pair<int,int> res = find_appear_once(array,sizeof(array)/sizeof(array[0]));
cout<<res.first<<"\t"<<res.second<<endl;
return 0;
}