您的位置:首页 > 其它

ACM_51nod_1109_01组成的N的倍数

2017-08-29 22:39 218 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm