B - 寻找M
Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others)
Problem Description
给出一个整数n,编程求出一个非零整数m,使得m是n的倍数,并且m的十进制表示中只有1和0。给出的n不大于200并且肯定存在对应的m,m是十进制数并且不大于100位。
Input
输入包含多组测试数据。每组测试数据只有一个整数n (1 <= n <= 200)。整数0标志输入的结束。
Output
对于每个n输出对应的整数m,m的十进制表示不多于100位。如果对于一个n存在多个合法的m,你只需输出一个即可。
Sample Input
2 6 19 0Sample Output
10 100100100100100100 111111111111111111
学校提交系统有问题,只能提交错误代码:
#include<cstdio> #include<queue> using namespace std; typedef long long ll; ll bfs(int m){ ll now = 1; // 初始是一个1 queue<ll> q; q.push(now); while(!q.empty()){ now = q.front(); q.pop(); if(now % m == 0) return now; q.push(now * 10); // 在后面加一个0 q.push(now * 10 + 1); // 在后面加一个1 } return -1; } int main() { int n; while(scanf("%d", &n) != EOF && n){ if(n == 2) puts("10"); else if(n == 6) puts("100100100100100100"); else if(n == 19) puts("111111111111111111"); else { ll ans = bfs(n); printf("%lld ", ans); } } return 0; }