题目描述
给定一个小于99的正整数n, 编写函数找一个最小的m, 使得m为n的倍数, 且m的各个位数仅由1和0组成.
例如输入:
5
20
98
则输出:
10
100
11000010
输入
测试数据有多组。
每行输入一个正整数 n (0 < n < 99)。
输出
与输入相对应,每行输出一个表示结果的整数m。
样例输入
5
20
98
样例输出
10
100
给定一个小于99的正整数n, 编写函数找一个最小的m, 使得m为n的倍数, 且m的各个位数仅由1和0组成.
例如输入:
5
20
98
则输出:
10
100
11000010
输入
测试数据有多组。
每行输入一个正整数 n (0 < n < 99)。
输出
与输入相对应,每行输出一个表示结果的整数m。
样例输入
5
20
98
样例输出
10
100
11000010
思路:
1.DFS构造出数组,然后判断即可,判断倍数的时候,数组的元素要大于数字且取余为0
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
ll a[150000],n;
int ipos=0;
void DFS(ll sum,ll cnt)
{
sum=sum*10+1;
cnt++;
a[ipos++]=sum;
if(cnt==13)
return;
else
DFS(sum,cnt);
sum=(sum-1)/10;
sum=sum*10;
a[ipos++]=sum;
if(cnt==13)
return;
else
DFS(sum,cnt);
cnt--;
}
int main()
{
DFS(0,0);
sort(a,a+ipos-1);
while(scanf("%lld",&n)==1)
{
for(int i=0; i<ipos;