配列操作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; }