#include<iostream>
using namespace std;
unsigned int FindFirstBite1(
unsigned int num)
{
unsigned int n =
0;
while(((num&
1) ==
0) && (n<
8*
sizeof(
int)))
{
++n;
num = num>>
1;
}
return n;
}
bool IsBit1(
unsigned int num,
unsigned int index)
{
num = num>>index;
return num&
1;
}
void FindTwoNumbersAppearanceOnce(
int Array[],
int length)
{
if(Array == NULL || length <
2)
return;
int sum =
0;
for(
int i =
0; i < length; ++i)
sum ^=Array[i];
int index = FindFirstBite1(sum);
int num1 =
0;
int num2 =
0;
for(
int i =
0; i < length; ++i)
{
if(IsBit1(Array[i], index))
num1 ^=Array[i];
else
num2 ^=Array[i];
}
cout<<num1<<
" "<<num2<<endl;
}
int main()
{
int a[] = {
1,
1,
2,
2,
3,
4 ,
5 ,
4,
6,
7,
6,
5};
FindTwoNumbersAppearanceOnce(a,
12);
}
转载请注明原文地址: https://ju.6miu.com/read-19947.html