Problem: In an array, all numbers appear three times except one which only appears only once. Please find the unique number.
参考:http://codercareer.blogspot.com/2013/12/no-50-numbers-appearing-once.html
/* Copyleft: Ming Lin <minggr@gmail.com> */
#include <stdio.h>
void calculate_one(int *count, int data)
{
int i = 0;
while (data) {
if (data & 1)
count[i]++;
i++;
data = data >> 1;
}
}
int find_unique(int data[], int n)
{
int count[32];
int i;
int r = 0;
for (i = 0; i < 32; i++)
count[i] = 0;
for (i = 0; i < n; i++)
calculate_one(count, data[i]);
for (i = 0; i < 32; i++) {
if (count[i] % 3)
r |= (1 << i);
}
return r;
}
int main()
{
int data[] = {9, 100, 5, 5, 9, 9, 80, 5, 80, 80};
int n = 10;
printf("%d\n", find_unique(data, n));
return 0;
}