程序员面试100题之三十四,找出数组中两个只出现一次的数字

#include "stdafx.h"



int find_first_1(int n)

{

	int index = 1;

	while( (n&1)==0 && index < 32)

	{

		n >>= 1;

		index <<= 1;

	}

	return index;

}

void find(int * arr, int len, int & num1, int & num2)

{

	int temp = 0;

	for(int i=0;i<len;i++)

		temp ^= arr[i];

	unsigned int index = find_first_1(temp);



	num1 = 0;

	num2 = 0;

	for(int i=0;i<len;i++)

	{

		if((arr[i]&index)==0)

			num1^=arr[i];

		else

			num2^=arr[i];

	}

}



int _tmain(int argc, _TCHAR* argv[])

{

	int num1,num2;

	int arr[] = {2,2,3,100,4,5,4,5};

	find(arr,8,num1,num2);

	printf("%d %d\n",num1,num2);

	return 0;

}



你可能感兴趣的:(程序员)