问题描述:给出2 * n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字;
解决方法:利用位运算符里面的异或运算符,两个相同的数异或得0,0与一个非0的数异或得非0的数本身。
代码实例:
#include<iostream>
using namespace std;
int main()
{
int arr[9] = {1, 1, 2, 2, 4, 5, 5, 6, 6};
int result = 0;
for(int i=0; i<9; i++)
{
result ^= arr[i];
}
cout << result << endl;
return 0;
}
复习:位运算符
操作符 | 功能 | 用法 |
<< | 左移 | <<expr |
>> | 右移 | >>expr |
& | 与 | expr1 & expr2 |
| | 或 | expr1 | expr2 |
~ | 取反 | expr1 ~ expr2 |
^ | 异或 | expr1 ^ expr2 |