题意:给你一个数n,求一个最小的数m,m是n的倍数,且m只能由0或1组成
分析:注意一下当n不为零时,m的最高位一定是1的,那么就可以逐渐枚举后面的0、1情况了,需要用到同模余定理
代码:
#include<iostream> #include<stdio.h> #include<cstring> using namespace std; int k[1000000]; int main() { int n,t,i; while(scanf("%d",&n)&&n) { k[1]=1; for(i=2;k[i-1];i++) k[i]=(k[i/2]*10+i%2)%n; i--;t=0; while(i) { k[t++]=i%2; i/=2; } while(t) printf("%d",k[--t]); printf(" "); } return 0; }