#include<stdio.h>
int main()
{
void function(int * str, int size, int *p1, int *p2);
int i = 0;
int num1 = 0, num2 = 0;
int arr[10] = {0};
int len = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < len; i++)
{
scanf("%d", &arr[i]);
}
function(arr, len,&num1,&num2);
printf("%d %d", num1, num2);
printf("\n");
system("pause");
return 0;
}
void function(int * str, int size,int *p1,int *p2)
{
int i = 0,signal = 0,ret=0;
for (i = 0; i < size; i++)
{
ret ^= str[i];
}
for (i = 0; i < 8 * sizeof(int); i++)
{
if ((ret >> i) & 1 == 1)
{
signal = i;
break;
}
}
for (i = 0; i < size; i++)
{
if ((str[i] >> signal) & 1 == 1)
*p1 ^= str[i];
else
*p2 ^= str[i];
}
}
本文出自 “零点时光” 博客,请务必保留此出处http://10741764.blog.51cto.com/10731764/1713975
C语言单次扫描找出两个只出现一次的数
本文介绍了一个使用C语言编写的程序,该程序通过单次扫描找出数组中仅出现一次的两个整数。利用异或运算特性,首先找到两个唯一数的异或结果,再根据异或结果中的任意一位来划分数组,进一步计算得到这两个唯一数。

被折叠的 条评论
为什么被折叠?



