数组中找出单独出现的2个数

一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。

#include <iostream>
using namespace std;
void find_Two_Single_Num(int *arr, int &num1, int &num2,int len) {
	int t = 0;
	for (int i = 0; i < len; i++) {
		t = t ^ arr[i];
	}//异或 t 就是两个不同数的异或值
	int firstone = 1;
	while ((t&firstone) == 0) { //== 优先级高于& 必须加括号
		firstone = firstone << 1;
	}//找到t中第一个1的位置 也就是2个不同数最先开始出现差异的位数
	int n1, n2;
	n1 = n2 = 0;
	for (int i = 0; i < len; i++) {
		if ((arr[i] & firstone) == 0) {  //根据firstone是否是1分为2组,并且2个不同数肯定在不同的组
			n1 = n1 ^ arr[i];
		}
		else {
			n2 = n2 ^ arr[i];
		}
	}
	num1 = n1;
	num2 = n2;
}
int main()
{
	int a[] = { 2,2,4,2,4,2,5,7 };
	int len = sizeof(a) / sizeof(int);
	int num1, num2;
	find_Two_Single_Num(a, num1, num2, len);
	cout << "num1=  " << num1 << "   num2=   " << num2;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42673507/article/details/86252805