POJ1426 Find The Multiple

来源:互联网 发布:神话打电话软件 编辑:程序博客网 时间:2024/06/08 13:14

POJ1426 Find The Multiple

题目描述
Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than 200 and there is a corresponding m containing no more than 100 decimal digits.

Input
The input file may contain multiple test cases. Each line contains a value of n (1 <= n <= 200). A line containing a zero terminates the input.

Output
For each value of n in the input print a line containing the corresponding value of m. The decimal representation of m must not contain more than 100 digits. If there are multiple solutions for a given value of n, any one of them is acceptable.

Sample Input
2
6
19
0

Sample Output
10
100100100100100100
111111111111111111

大致题意
给你一个数n,然后让你求n的倍数m,而且这个m的十进制只能由0,1组成,任意输出一个满足条件的m。

思路
暴力dfs从m的低位向高位找,每个位置上不是0就是1,m初始为1,如果可以被n整除则输出,否则m*10,m*10+1,继续找。m可能会很大,用unsigned long long 来定义m。

下面是代码

#include <iostream> #include <cstdio>#include <cstdlib>#include <cmath>#include <fstream>#include <algorithm>#include <climits>#include <cstring>#include <string>#include <set>#include <queue>#include <stack>#include <vector>#include <list>#include<sstream>#include<ctime>using namespace std;int flag,n;  void dfs(unsigned long long int s,int f){    if(flag==1)  //如果已经找到,结束    return;    if(s%n==0)      //如果能被你整除    {        cout<<s<<endl;   //输出结果,flag标记为1,结束        flag=1;        return ;    }    if(f>19) return ;   // 搜到第19位即可    dfs(s*10,f+1);          dfs(s*10+1,f+1);}int main()  {       while(1)     {        flag=0;                      cin>>n;        if(n==0) return 0;         dfs(1,1);     } }  
0 0