笨笨当火炬手

1018:笨笨当火炬手

描述

全运会就要开始了,笨笨想成为湖南地区的火炬手,经过层层选拔,最终到了最后一关,这一关给出了一个正整数n(N≤100000),求一个最小的正整数m,使得n×m的十进制表现形式中只含1和0。

输入
一行一个数n
输出
输出一行,如果有解,输出最小的m,否则输出“no solution”。
样例输入
12
样例输出
925
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long n,x,queue[1000003];
int head,tail;
int main()
{
 freopen("torch.in","r",stdin);
 freopen("torch.out","w",stdout);
 cin>>n;
 head=0; tail++; queue[tail]=1;
 do
  {
   head++;
        head=(head-1)%1000000+1;
   x=queue[head];
   if (x%n==0)
    {
     cout<<x/n<<endl;
     return 0;
    }
   char a[20];
   sprintf(a,"%I64d",x);//这里要注意,如果你直接判断是否超long long ,在CENA下会显示编译错误,于是我非常巧妙的判断其位数,long long 是19位,只要字符串在19位以内即可
   int len=strlen(a);
   if (len<=19)
    {
      tail++;
      tail=(tail-1)%1000000+1;
      queue[tail]=x*10;
      tail++;
      tail=(tail-1)%1000000+1;
      queue[tail]=x*10+1;
    }
  }
 while (head!=tail);//找出所有long long 范围内的01组合,然后判断是否可以整除即可
 cout<<head<<" "<<tail<<endl;
 cout<<queue[tail]<<endl;
 printf("no solution");
 return 0;
}

你可能感兴趣的:(笨笨当火炬手)