#include
#include
bool isSet(char *bitarray, int num)
{
int index = num / 8;
int offset = num % 8;
return bitarray[index] & (char)(1 << offset);
}
void set(char *bitarray, int num)
{
int index = num / 8;
int offset = num % 8;
bitarray[index] |= (char)(1 << offset);
}
void printMissingNum(int *array, int arraysize, int N)
{
int bitarraysize = (N + 7) / 8;
char *bitarray = (char*)calloc(bitarraysize, 1);
for(int i = 0; i < arraysize; ++i) {
set(bitarray, array[i]);
}
for(int i = 0; i < N; ++i) {
if(!isSet(bitarray, i)) {
printf("%d ", i);
}
}
free(bitarray);
printf("\n");
}
int main()
{
int array[] = {1, 2, 3, 5, 6};
int N = 10;
printMissingNum(array, sizeof(array) / sizeof(int), N);
return 0;
}