题目描述
时间来到20210年,科学家终于发明出了与二进制星人沟通的方式。二进制星人只能理解完全由
1
1
1 和
0
0
0 组成的数字,聪明的科学家发现,如果想表示数字
n
n
n ,只要用数字
1
1
1 和数字
0
0
0 写出一个为
n
n
n 的倍数的数字,把它拿给二进制星人看,他们就能理解了。如想表示
6
6
6 这个数字,只要拿着
100100100100100100
100100100100100100
100100100100100100(
6
6
6的
16683350016683350
16683350016683350
16683350016683350倍)给二进制星人看,他就会明白这是
6
6
6 的意思了。给出
n
n
n ,请你模拟这一过程。
提示:本题采用Special Judge,你无需输出所有符合条件的
m
m
m ,你只需要输出任一符合条件的
m
m
m 即可。
数据范围
1 ≤ n ≤ 200 1 \le n \le 200 1≤n≤200
分析
算法:BFS暴力枚举
找到一个 01 01 01 表示的十进制数 m m m ,使得 m ∣ n = 0 m \mid n = 0 m∣n=0 。
使用BFS暴力枚举,找到符合条件的值,输出并返回。
代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
typedef unsigned long long LL;
LL n;
void bfs()
{
queue<LL> q;
q.push(1);
while (q.size())
{
LL v = q.front(); q.pop();
if (v % n == 0) // 找到答案。
{
cout << v << endl; // 先输出再返回
return;
}
q.push(v * 10);
q.push(v * 10 + 1);
}
}
int main()
{
while (cin >> n && n) bfs();
return 0;
}