1. 程式人生 > 其它 >點陣圖演算法

點陣圖演算法

 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 }