點陣圖演算法
阿新 • • 發佈:2021-06-21
1 #include<stdio.h> 2 #include<Windows.h> 3 4 void init(char* data, int len) 5 { 6 //根據資料的需求來實現 7 //這裡測試演算法的效果,能夠被7整除的數,都在這個集合中 8 unsigned int n = len * 8; 9 for (unsigned int i = 0; i < n; i++) 10 { 11 if (i % 7 == 0) 12 { 13 char* p = data + i / 8; 14 *p = *p | (1 << (i % 8)); 15 } 16 } 17 } 18 19 bool check(char* data, int len, int value) 20 { 21 //定位到指定的位元組 22 char* p = data + value / 8; 23 //判斷這個指定位元組中的值是否為1 24 return *p & (1 << (value % 8)); 25 26 } 27 28 int main() 29 { 30 //分配一塊足夠的記憶體,來儲存點陣圖31 32 unsigned int n = 4000000000; 33 int len = n / 8 + 1; 34 char* data = (char*)malloc(len); 35 36 memset(data, 0, len); 37 //轉載資料集合(只需要轉載一次) 38 init(data, len); 39 while (1) 40 { 41 printf("輸入要檢測的數:【輸入-1結束】\n"); 42 int value; 43 scanf_s("%d", &value);44 if (value == -1) 45 break; 46 47 if (check(data, len, value)) 48 { 49 printf("%d在集合中\n", value); 50 } 51 else 52 { 53 printf("%d不在集合中\n",value); 54 } 55 getchar(); 56 } 57 return 0; 58 }