异或运算
异或运算是一种位运算,符号为^
异或运算是相同的话为0,不同的话为1,即:
0^0 = 0,
1^0 = 1,
0^1 = 1,
1^1 = 0;
异或运算的交换性
异或运算的交换性表现为:
a ^ b ^ c = a ^ c ^ b
通过这个性质我们可以解决以下问题:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
如题
题目中我们会自然的想到数组,但出题人把空间锁死了。
而异或就可以解决这个问题:
int main(){
int n;
n=read();
//int ch=getchar();
long long a=0, b=0;
//printf("%d\n", n);
scanf("%lld", &a);
//printf("%d\n", a);
while(1){
scanf("%lld", &b);
//printf("a: %lld, b: %lld\n", a, b);
a=a^b;
n--;
if(n==1)
break;
}
printf("%lld", a);
return 0;
}