- #include<stdio.h>
- #include<stdlib.h>
- void record(int **p,unsigned int k)
- {
- int i=k/32/5000;
- int j=(k-i*5000*32)/32;
- int m=k%32;
- int n=1;
-
- n<<=m;
- *(*(p+i)+j)|=n;
- }
- void count_int(int *p,int *count)
- {
- register int i=0;
- register int j;
- register int k;
-
- while(i<5000)
- {
- j=0;
- k=1;
- while(j<32)
- {
- if(k&*p)
- (*count)++;
- k<<=1;
- j++;
- }
- p++;
- i++;
- }
- }
- void main()
- {
- FILE *fp;
- register int i=0;
- unsigned int k=0;
- int count=0;
- unsigned int num=4294967295;
- int memory_size=num/32;
- int *p[26844];
- char data_file[30];
-
- for(;i<memory_size/5000+1;i++)
- p[i]=calloc(5000,sizeof(int));
- printf("\n请输入存放数据的文件路径:");
- gets(data_file);
- if((fp=fopen(data_file,"rb"))==NULL)
- {
- printf("\n文件打开错误!");
- exit(0);
- }
- else
- {
- while(!feof(fp))
- {
- fscanf(fp,"%d",&k);
- record(p,k);
- }
- }
- for(i=0;i<26844;i++)
- count_int(p[i],&count);
- printf("\n共有 %d 个不相同的数!\n",count);
- }
-
-
posted @
2013-04-04 21:27
天天AC
阅读(
342)
评论()
编辑
收藏
举报