poj1426-Find The Multiple

題意:給你一個數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("\n");
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章