POJ 1426 Find The Multiple

                                                                                Find The Multiple

Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 7103   Accepted: 2952   Special Judge

Description

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

Source

Dhaka 2002

 

 1 #include <cstdlib>
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <string.h>
 5 using namespace std;
 6 int n;
 7 int data[101];
 8 
 9 int judge(int d[])//判断是否有data(mod n)==0 
10 {
11     int c=0;
12     int i;
13     for(i=0;i<=100;i++)
14     if(d[i])
15     break;
16     if(i>100)
17     return 0;
18     c=d[i];
19     c%=n;
20     for(i=i+1;i<=100;i++)
21     {
22                         c*=10;
23                         c+=d[i];
24                         c%=n;
25     }
26     if(c==0)
27     return 1;
28     else
29     return 0;
30 }
31 
32 
33 void output()//输出符合要求的data 
34 {
35     int i;
36     for(i=1;i<=100;i++)
37      if(data[i])
38      break;
39      for(i;i<=100;i++)
40      cout<<data[i];
41      cout<<endl;
42 }
43 int dfs(int s)
44 {
45     int i,j,k;
46     if(judge(data))
47     {output();return 1;}
48     
49     for(i=s;i<=100;i++)
50     {if(data[i])
51      continue;
52      
53      
54                        data[i]=1;
55                        if(dfs(i+1))
56                        return 1;
57                        data[i]=0;
58     }
59     
60     return 0;
61 }
62                        
63                        
64                        
65                        
66                        
67                        
68                        
69     
70 
71 
72 int main(int argc, char *argv[])
73 {
74    while(scanf("%d",&n)!=EOF)
75    {if(n==0)
76     break;
77                   if(n==1)
78                  {cout<<n<<endl;continue;}
79                  memset(data,0,sizeof(data));
80                  
81                  dfs(1);
82                  
83    }
84                   
85 
86     
87     
88 
89 
90 
91 system("PAUSE");
92 return EXIT_SUCCESS;
93 }
posted @ 2012-05-31 10:02  cseriscser  阅读(220)  评论(0编辑  收藏  举报