您的位置:首页 > 其它

位操作-找到数组中只出现一次的数字

2013-08-25 10:43 162 查看
题目一:数组中数字都两两相同,只有一个不同,找出该数字:

int findUnique(int* a, int len)
{
int i = 1;
int temp = a[0];
for(; i < len; i++)
{
temp = temp ^ a[i];
}
printf("%d ", temp);
}


题目二:数组中数字两两相同,有两个不同,找出这两个:

#include <stdlib.h>

int a[] = {1,1,2,4,3,3,2,5};

int findXorSum(int* a, int len)
{
int i = 0;
int temp = 0;
for(; i < len; i++)
{
temp = temp ^ a[i];
}
return temp;
}

int findFirstBit1(int n)
{
int count = 1;
while(!( n & 1))
{
n = n>>1;
count++;
}
return count;
}

int isBit1(int a, int count)
{
a = a >> count-1;
return (a & 1);
}

void findTwoUnique(int* a, int len)
{
int i = 0;
int m = 0, n = 0;
int temp = findXorSum(a, len);
int count = findFirstBit1(temp);
for(; i < len; i++)
{
if(isBit1(a[i],count))
{
m = m ^ a[i];
}
else
{
n = n ^ a[i];
}
}
printf("%d, %d", m, n);
}

int main()
{
findTwoUnique(a,8);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐