//============================================================================ // Name : 100题之找出数组中两个只出现一次的数字.cpp // Author : // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> using namespace std; int findLocate(int number) { int i=0; int k=1; while(number<=32) { i++; if(number&k) { return k; } k<<=1; } } bool FindNumber(int*array,int length,int &a,int &b) { a=0; b=0; if(length<2) return false; int number=0; for(int i=0;i<length;i++) number^=array[i]; int locate=findLocate(number); for(int i=0;i<length;i++) { if(array[i]&locate) { a^=array[i]; } else b^=array[i]; } return true; } int main() { int array[8]={1,1,2,3,4,2,3,5}; int a,b; FindNumber(array,8,a,b); cout <<a<<" "<<b << endl; return 0; }