有很多不重复的整数, 其中最大值不超过40亿, 最小值是0.
要求判断某个指定的整数, 是否在这个集合中.
#include <string>
#include <iostream>
using namespace std;
//写入能被三整除的数
void init(int n, char *data) {
for (int i = 0; i < n; i++) {
if (i % 3 == 0) {
char* p = data + i / 8;
*p = *p | (1 << i % 8);
}
}
}
//位图算法
bool check(char* data, unsigned int value) {
char* p = data + value / 8;
bool ret = *p & (1 << (value % 8));
return ret;
}
int main(void) {
unsigned int n = 4000000000;
int len = n / 8 + 1;
char* data = new char[len];
init(n, data);
while (1) {
cout << "请输入要检测的数【按-1退出】:" << endl;
unsigned int value = 0;
cin >> value;
if (value == -1) {
break;
}
if (check(data, value)) {
cout << "输入的数在数据中" << endl;
}
else {
cout << "输入的数不在数据中" << endl;
}
}
system("pause");
return 0;
}