您的位置:首页 > 其它

已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。

2014-01-08 15:26 316 查看
  已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。

   8位最多99 999 999,大概需要99m个bit,大概10几m字节的内存即可。 (可以理解为从0-99 999 999的数字,每个数字对应一个Bit位,所以只需要99M个Bit==1.2MBytes,这样,就用了小小的1.2M左右的内存表示了所有的8位数的电话)

#include <stdio.h>
#include <string.h>

#define BIT_SIZE 3 * 1024 *1024
#define PHONE_SIZE 99999999

void set_bits(int num, int *bits);
int count_phone(int *bit);

void set_bits(int num, int *bits)
{
int pos, mod;
int mark;
pos = num / 32;
mod = num % 32;
mark = 1 << mod;
bits[pos] |= mark;
}

int count_phone(int *bits)
{
int i;
int count = 0;
for (i = 0; i < BIT_SIZE; i++) {
while (bits[i] > 0) {
bits[i] &= bits[i] - 1;
count++;
}
}
return count;
}

int main(int argc, char *argv[])
{
FILE *fp;
int bits[BIT_SIZE];
char line[1024];
if (argc != 2) return -1;
fp = fopen(argv[1], "r");

while (fgets(line, sizeof(line), fp)) {
int num;num = atoi(line);
set_bits( num, bits);
}

fclose(fp);
printf("phone number count %d\n", count_phone(bits));

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐