1109 01组成的N的倍数
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
问题解释
给定一个自然数N,找出一个M,使得M > 0且M是N的倍数,并且M的10进制表示只包含0或1。求最小的M。
例如:N = 4,M = 100。
Input
输入1个数N。(1 <= N <= 10^6)
Output
输出符合条件的最小的M。
Input示例
4
Output示例
100
问题分析
dfs搜索*10和*10+1两个方向,n限制为1e6,计算的m可能会超出ll数据类型的范围,所以自定义一个结构体,用字符数组储存01串m,用int记录m%n;
注意
记录01串用string类型会mle
AC代码
#include <iostream>
#include<queue>
#include<string>
using namespace std;
#define ll long long int
struct node {
char str[50];
int size = 1;
ll m;
}num;
int n;
string dfs() {
if (n == 1)
return "1";
queue<node> q;
num.m = 1;
num.str[num.size-1] = '1';
q.push(num);
node tem;
while (!q.empty()) {
tem = q.front();
q.pop();
tem.m = tem.m * 10%n;
tem.str[tem.size++] ='0';
if (tem.m% n == 0)
return tem.str;
q.push(tem);
tem.m = (tem.m + 1)%n;
tem.str[tem.size-1] = '1';
if (tem.m% n == 0)
return tem.str;
q.push(tem);
}
}
int main()
{
while (cin>>n) {
cout << dfs() << endl;
}
return 0;
}