先把源程序贴出来:
版本一:
#include <iostream.h>
#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>
#include <iomanip.h>
#include <ctime>
#include <windows.h>
int map[8]={1,2,4,8,16,32,64,128};
int Random()
{
int result1,result2;
//srand((unsigned)time(0));
result1=rand();
//cout<<setiosflags(ios::left)<<setw(15)<<result1;
result2=rand();
//cout<<setiosflags(ios::right)<<setw(15)<<result2;
return ((result1<<16)+result2);
}
void InPut_Map(char *mapbase,int size)
{
int data;
int i;
char *p;
p=mapbase;
for(i=0;i<size;i++)
{
//srand((unsigned)time(0));
data=Random();
//cin>>data;
p+=data/8;
(*p)=(*p)|(map[data%8]);
p=mapbase;
//Sleep(1000);
}
}
void output(char * mapbase)
{
int i,j;
int count=0;
char *p=mapbase;
cout<<"After sorted,the number is:"<<endl;
for(i=0;i<0x1fffffff;i++)
{
p=mapbase+i;
for(j=0;j<8;j++)
if(((*p)&(map[j]))!=0)
{
if(count%5==0)
cout<<endl;
cout<<setiosflags(ios::left)<<setw(15)<<(8*i+j);
count++;
}
}
}
void main()
{
int size;
char *mapbase;
cout<<0xffffffff;
cout<<"Please input the number'size:";
cin>>size;
if(size>0)
{
if(!(mapbase=(char *)calloc(0x1fffffff,sizeof(char))))
{
cout<<"The memory is not enough"<<endl;
exit(0);
}
InPut_Map(mapbase,size);
}
else
{
cout<<"Size is invalided"<<endl;
exit(0);
}
output(mapbase);
free(mapbase);
}
版本二:
#include <iostream.h>
#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>
#include <iomanip.h>
#include <ctime>
#include <windows.h>
int map[32]={
0x00000001,0x00000002,0x00000004,0x00000008,
0x00000010,0x00000020,0x00000040,0x00000080,
0x00000100,0x00000200,0x00000400,0x00000800,
0x00001000,0x00002000,0x00004000,0x00008000,
0x00010000,0x00020000,0x00040000,0x00080000,
0x00100000,0x00200000,0x00400000,0x00800000,
0x01000000,0x02000000,0x04000000,0x08000000,
0x10000000,0x20000000,0x40000000,0x80000000
};
int Random()
{
int result1,result2;
//srand((unsigned)time(0));
result1=rand();
//cout<<setiosflags(ios::left)<<setw(15)<<result1;
result2=rand();
//cout<<setiosflags(ios::right)<<setw(15)<<result2;
return ((result1<<16)+result2);
}
void InPut_Map(int *mapbase,int size)
{
int data;
int i;
int *p;
p=mapbase;
for(i=0;i<size;i++)
{
//srand((unsigned)time(0));
data=Random();
p+=data/32;
(*p)=(*p)|(map[data%32]);
p=mapbase;
//Sleep(1000);
}
}
void output(int * mapbase)
{
int i,j;
int count=0;
int *p=mapbase;
cout<<"After sorted,the number is:"<<endl;
for(i=0;i<0x07ffffff;i++)
{
p=mapbase+i;
for(j=0;j<32;j++)
if(((*p)&(map[j]))!=0)
{
if(count%5==0)
cout<<endl;
cout<<setiosflags(ios::left)<<setw(15)<<(32*i+j);
count++;
}
}
}
void main()
{
int size;
int *mapbase;
cout<<0xffffffff;
cout<<"Please input the number'size:";
cin>>size;
if(size>0)
{
if(!(mapbase=(int *)calloc(0x07ffffff,sizeof(int))))
{
cout<<"The memory is not enough"<<endl;
exit(0);
}
InPut_Map(mapbase,size);
}
else
{
cout<<"Size is invalided"<<endl;
exit(0);
}
output(mapbase);
free(mapbase);
}