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
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 }