#include<stdio.h>
#include<assert.h>
#include<windows.h>
void find_single_nums(int arr[], int sz, int *num1, int *num2)
{
assert(arr);
assert(sz > 0);
int tmp = arr[0];
int i = 1;
for (i = 1; i < sz; i++)
{
tmp = tmp^arr[i];
}
int flag = 1;
while (1)
{
if (tmp & flag) //成立说明此处为1
{
break;
}
else
{
flag = flag << 1;
}
}
for (i = 0; i < sz; i++)
{
if (arr[i]&flag)
{
*num1 = *num1^arr[i];
}
else
{
*num2 = *num2^arr[i];
}
}
}
int main()
{
int arr[] = { 1, 1, 22, 33, 22, 33, 5, 6, 7, 8, 5, 8, 7, 6, 999, 222, 38, 76, 38, 76 };
int sz = sizeof(arr) / sizeof(arr[0]);
int num1 = 0;
int num2 = 0;
find_single_nums(arr, sz, &num1, &num2);
printf("num1=%d\n", num1);
printf("num2=%d\n", num2);
system("pause");
return 0;
}
单身狗
最新推荐文章于 2021-09-02 08:20:06 发布