配列操作c
662 ワード
配列内のすべての数はペアで現れ、2つの数だけが1回しか現れず、この2つの数を見つけます.
int main()
{
int a[] = {2,4,6,5,4,2,6,3};
int len = sizeof(a)/sizeof(int);
int num = 0;
int num1 = 0;
int num2 = 0;
// 1、
int i = 0;
for (i = 0; i < len; i++)
num ^= a[i];
// 2、 0
int count = 1;
while(1)
{
if(num & 1 == 1)
break;
num >>= 1;
count++;
}
// 3、
for(i = 0; i < len; i++)
{
int temp = a[i] >> (count-1);
if(temp & 1) // a[i] count 1
num1 ^= a[i];
else
num2 ^= a[i];
}
printf("num1 = %d
", num1);
printf("num2 = %d
", num2);
return 0;
}