2 6 19 0Sample Output
10 100100100100100100 111111111111111111
1.每个数的二进制数 乘以 10,就等于他原来的十进制树乘以 2。
举个例子 : 1二进制1如果 1*10=10 那就是2的二进制,10*10=100 那就是4的二进制。
一个十进制数除以2得到的数,他们在二进制里相差10倍。
2.同余定理
(a+b)%n = (a%n +b%n)%n;
(a*b)%n = (a%n *b%n)%n;
枚举每一个数的二进制数,看这个是不是n的倍数1 // 2 // Created by w on 2020/11/3. 3 // 4 5 #include <iostream> 6 using namespace std; 7 int arr[1000000]; 8 int main() 9 { 10 int n; 11 while (cin>>n) 12 { 13 int ans[200]; 14 if(n==0) 15 return 0; 16 arr[1]=1; 17 int i=0; 18 for(i=2;arr[i-1]!=0;i++) 19 { 20 arr[i]=(arr[i/2]*10+i%2)%n; //一个个的枚举每个数的二进制,是否满足条件,感觉有点像堆排序 21 } 22 i--; 23 int k=0; //记录下标,直到i==0 24 while (i) 25 { 26 int tmp=i%2;//缩减倍数 27 ans[k]=tmp; 28 k++; 29 i/=2; 30 } 31 for(int j=k-1;j>=0;j--) 32 cout<<ans[j]; 33 cout<<endl; 34 } 35 36 }
原文:https://www.cnblogs.com/B19044124/p/13922391.html