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; }