c语言-位运算
程序员文章站
2022-07-15 08:52:11
...
一组数据中只有一个数字出现了一次,其他数字都是成对出现的,请找出这个数字
int main() {
int arr[] = { 1,2,3,6,3,2,1 };
int i = 0;
int ret = 0;
for (i = 0; i < 7; i++) {
ret = ret ^ arr[i];
}
printf("%d\n", ret);
system("pause");
return 0;
}
一组数据中只有两个数字是出现了一次,其他数字都是成对出现的,请找出这两个数字
int main() {
int i = 0;
int ret = 0;
int pos = 0;
int arr[] = { 1,2,3,4,6,7,4,3,2,1 };
int len = sizeof(arr) / sizeof(arr[0]);
int num1 = 0;
int num2 = 0;
for (i = 0; i < len; i++) {
ret = ret ^ arr[i];
}
for (i = 0; i < 32; i++) {
if (((ret >> 1) & 1) == 1) {
pos = i;
break;
}
}
for (i = 0; i < len; i++) {
if (((arr[i] >> pos) & 1) == 1) {
num1 = num1 ^ arr[i];
}
}
num2 = num1 ^ ret;
printf("num1 = %d\nmun2 = %d\n", num1, num2);
system("pause");
return 0;
}
上一篇: c语言位运算