一、问题描述
一组数据中只有一个数字出现了一次。
其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
二、问题分析
定义一个变量ck并初始化为0
从数组的第一个元素开始判断
若ck第 i-1 位(从右向左)是0,那么置一
否则置0
全部判断完后,检测ck的那些位是1
这些1的 位+1 便是独苗的数字
三、代码实现
#include<stdio.h>
int* check(int arr[])
{
int *parr = arr;
int ck = 0;
int i = 0;
while(*arr)
{
if(0 == (ck<<arr[i]))//判断这个二进制数的第i位是否为0
ck|=(1<<arr[i]-1);//是的话,置1
else
ck^=(1<<arr[i]-1);//否则,置0
arr++;
}
for(i = 0; i<32 ; i++)
{
if(((ck>>i)&1)==1)
printf("%d ",i+1);
if((ck>>i)==0)
break;
}
return parr;
}
int main()
{
int arr[10] = {0};
int i = 0;
printf("请输入九个正整数:>");
for(i = 0;i<9;i++)
{
scanf("%d",&arr[i]);
}
check(arr);
return 0;
}