题目链接:
题目描述:
给定一个正整数 n,请你找到一个它的非零倍数 m。
要求 m 中只包含数字 0 或 1,并且总位数不超过 100 位。
输入格式:
输入包含多组测试数据。
每组数据占一行,包含一个正整数 n。
当输入 n=0 时,表示输入结束。
输出格式:
每组数据输出一行 m。
如果方案不唯一,则输出任意合理方案均可。
数据范围:
1≤n≤200
输入样例:
2
6
19
0
输出样例:
10
100100100100100100
111111111111111111
题解思路:
主要是理解一个公式即可:11%2=((1*10)%2+1)%2。
题解代码:
//本题关键点 例如11%2==((1*10)%2+1)%2
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5+10;
queue<pair<string,int>> ans;
int n;
signed main() {
while(cin>>n&&n){
while(ans.size())ans.pop();
ans.push({"1",1});//当前数是多少,当前余数是多少
while(ans.size()){
auto p=ans.front();
ans.pop();
if(p.second==0){
cout<<p.first<<endl;
break;
}
ans.push({p.first+"0",(p.second*10)%n});
ans.push({p.first+"1",(p.second*10+1)%n});
}
}
return 0;
}