您的位置:首页 > 其它

找出数组中只出现一次的两个数字

2015-11-05 20:04 239 查看
# include <stdio.h>

int findFirstOne(int num)
{
int flag = 1;
int count = 0;
while (flag)
{
if (num & flag == 1)
break;
flag << 1;
count++;
}
return count;
}

int isOne(int num,int index)
{
if ((num & (1<<index)) == 1)
return 1;
else
return 0;
}

void findTwoNumbers(int arr[],int len)
{
int i = 0;
int ret = 0;
int result = 0;
int num1 = 0;
int num2 = 0;
for (i = 0;i < len; i++)
{
result ^= arr[i];
}
ret = findFirstOne(result);
for (i = 0;i < len;i++)
{
if (isOne(arr[i],ret) == 1)
{
num1 ^= arr[i];
}
else
{
num2 ^= arr[i];
}
}
printf ("%d  %d\n",num1,num2);
}

int main()
{
int arr[] = {1,2,5,2,4,3,3,1};
int len = sizeof (arr)/sizeof (arr[0]);
findTwoNumbers(arr,len);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: