因为int的最大数是2^32-1==约43亿,用一个二进制的下标来表示一个int值,大概需要43亿个bit位,即约43亿/8=5.4亿Byte,即约540M的内存。这可以解决问题了。
1.首先遍历文件,将每个文件按照数字的正数,负数标记到2个BitSet上为:正数BitSetA_positive,负数BitSetA_negative
2.遍历另为一个文件,生成正数:BitSetB_positive,BitSetB_negative
3.取BitSetA_positiveandBitSetB_positive得到2个文件的正数的交集,同理得到负数的交集。
4.合并,问题解决。
#define N 1000#include<stdio.h>
void fun(char *a,char *b,char *c,char *d,char *f)
{while(*(a++)||*(b++))
{if(*a=*b)
{*c=*a
c++}
else
{*(d++)=*a
*(f++)=*b
}
*c=*d=*f='\0'
}
return
}
void main()
{char a[N],b[N],c[N],d[N],f[N]
FILE *fp,*fv,*fs,*fn
fp=fopen("F:\\332result.txt","r")
fv=fopen("F:\\336result.txt","r")
fs=fopen("F:\\random.txt","w")
fn=fopen("F:\\random1.txt","w")
fgets(a,fp)
fgets(b,fv)
fun(a,b)
fputs(c,fs)
fputs(d,fn)
fputs(f,fn)
fclose(fp)
fclose(fv)
fclose(fn)
fclose(fs)
}
ps:懒得调试了,我刚学完C语言没多久,还不是很行,望采纳,我好升级,嘿嘿。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)