#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int find_one_alone(int *arr,int len)
{
int ret=0;
int i=0;
for(;i<len;i++)
{
ret^=arr[i];
}
return ret;
}
int find_flag(int num)
{
int n=0;
while(num)
{
n+=1;
if(num&1==1)
return n;
else
num>>=1;
}
}
void find_two_diff(int *a,int len)
{
int first_ret=0;
int i=0;
int pos=0;
int num1=0;
int num2=0;
first_ret=find_one_alone(a,len);
pos=find_flag(first_ret);
for(i=0;i<len;i++)
{
if(1==(1<<(pos-1))&(a[i]))
{
num1^=a[i];
}
else
{
num2^=a[i];
}
}
printf("%d\n",num1);
printf("%d\n",num2);
}
int main()
{
int a[]={101,101,202,202,303,303,402,509};
find_two_diff(a,8);
system("pause");
return 0;
}
主要用到了异或和按位与的知识~