编程珠玑-第一章

来源:互联网 发布:富兰克林罗斯福 知乎 编辑:程序博客网 时间:2024/04/20 12:55

阅读第一章,我知道了这本书得精读,因为扫描的时候发现什么都没看懂........

只能精读+思考,使用位图表示大量的数据,用0/1标示,的确令人眼前一亮.....以前觉得没大用的位运算符挨个上场.......

#include <stdio.h>

#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1 + N/BITSPERWORD];

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;
}
那么思想就是....具体问题具体分析,犀利呀.