检验一个二进制流的整除性

 1 void check_div(int n)
 2 {
 3     int num=0;
 4 
 5     while(true)
 6     {
 7         int in_coming_bit;
 8         cin>>in_coming_bit;
 9 
10         if(in_coming_bit==1)
11         {
12             num=num*2+1;
13         }
14         else if(in_coming_bit==0)
15         {
16             num*=2;
17         }
18         else
19             break;
20 
21         if(num%n==0)
22             cout<<"yes"<endl;
23         else 
24             cout<<"no"<endl;
25     }
26 }
27 
28 
29 /*
30 任意一个数都可以表示成:m=a*n+r
31 
32 m*p也会使余数r*p:m*p=a*p*n+r*p 
33 
34 检测m*p后是否整除n,看余数(r*p)%n即可:(m*p)%n=(a*p*n)%n+(r*p)%n=0+(r*p)%n 
35 
36 当是二进制流时,余数的变化如下:
37 如果新到的是0,则r=(2*r)%n
38 如果新到的是1,则r=(2*r+1)%n
39 
40 */
41 
42 
43 // 看余数的代码,余数不会很大
44 void check_div(int n)
45 {
46     int num=0;
47     
48     while(true)
49     {
50         int in_coming_bit;
51         cin>>in_coming_bit;
52         
53 
54         if(in_coming_bit==1)
55         {
56             r=r*2+1;
57         }
58         else if(in_coming_bit==0)
59         {
60             r*=2;
61         }
62         else
63             break;
64 
65         if(r%n==0)
66             cout<<"yes"<endl;
67         else 
68             cout<<"no"<endl;
69     }
70 }

 

上一篇:一.LED灯的点亮——从简单的汇编开始了解


下一篇:AI中各种浮点精度概念集合:fp16,fp32,bf16,tf32,fp24,pxr24,ef32