Find The Multiple
Time Limit: 1000MS | Memory Limit: 10000K | |||
Total Submissions: 28309 | Accepted: 11735 | 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
#include <iostream> #include<queue> #include<cstdio> #include<cstring> using namespace std; long long dfs(int n) { queue<long long>q; q.push(1); while(1) { long long c=q.front(); q.pop(); if(c%n==0) return c; q.push(c*10+1); q.push(c*10); } } int main() { int n; while(cin>>n&&n) { cout<<dfs(n)<<endl; } return 0; } #include<cstdio> #include<cstring> #include<iostream> using namespace std; int dfs(long long pre,long long x,long long n){ if(pre>x) return 0;//判断是否溢出,溢出了就不是正解 if(x%n==0) { cout<<x<<endl;return 1; } if(dfs(x,x*10,n)) return 1; return dfs(x,x*10+1,n); } int main() { int n; while(scanf("%d",&n)!=EOF&&n) { dfs(0,1,n); } } #include <iostream> #include <stdio.h> using namespace std; typedef unsigned long long LL; //这里可以用long long int f; LL ans; void dfs(LL n,LL mu,int s) { if(f||(s==19)) return; if(mu%n==0) { f=1; ans=mu; return; } else { dfs(n,mu*10,s+1); dfs(n,mu*10+1,s+1); } return; } int main() { int n; while(1) { f=0; scanf("%d",&n); if(!n) break; LL nn=n; dfs(nn,1,0); printf("%I64u\n",ans); } return 0; }