C语言位图算法详解(2)
约束:有 1MB多(不超过2MB) 的内存空间可用,有充足的硬盘空间。 #includestdio.h#define BITSPERWORD 32#define SHIFT 5#define MASK 0x1F#define N 10000000int a[1 + N/BITSPERWORD
约束:有 1MB多(不超过2MB) 的内存空间可用,有充足的硬盘空间。
#include<stdio.h>
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1 + N/BITSPERWORD];
/* a[i>>SHIFT]是第i位应该在第几个int上 */
/* (1<<(i & MASK))是第i位在该int上的第几个bit */
void set(int i)
{
a[i>>SHIFT] |= (1<<(i & MASK));
}
void clr(int i)
{
a[i>>SHIFT] &= ~(1<<(i & MASK));
}
int test(int i)
{
return a[i>>SHIFT] & (1<<(i & MASK));
}
int main()
{
int i;
for(i = 0; i < N; i++)
clr(i);
while(scanf("%d", &i) != EOF)
set(i);
for(i = 0; i < N; i++)
if(test(i))
printf("%d\n", i);
return 0;
}
希望本文所述对大家C程序算法设计的学习能有所帮助。
- 上一篇:C语言接口与实现方法实例详解
- 下一篇:C语言快速幂取模算法小结
精彩图集
精彩文章





