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语言快速幂取模算法小结
收藏文章
精彩图集
精彩文章