解题思路:本题以1为起始点,分别向"+ 1"和"+0"后的两个数拓展,如果满足条件则返回。不过本题可能拓展到的数可能超过long long,所以我们需要用string存储答案,但是这样我们就不能直接判断这个数能不能整除n,所以我们需要在拓展的过程中进行处理。这里运用到一个关于取模小技巧:
11 % 2 = ((1 × 10) % 2 + 1) % 2
C++代码
#include <bits/stdc++.h>
// #define int long long
using namespace std;
int n;
string bfs()
{
queue<pair<string, int>> q;
q.push({"1", 1});
while (q.size())
{
auto t = q.front();
q.pop();
if (t.second == 0) return t.first;
q.push({t.first + "0", (t.second * 10) % n});
q.push({t.first + "1", (t.second * 10 + 1) % n});
}
}
signed main()
{
while (cin >> n, n)
{
cout << bfs() << endl;
}
return 0;
}
创作不易,大家可以在AcWing注册账号,参与一下AC之星计划,我的邀请码是MYRGS。对题解有任何疑问可以在评论区下面评论