Find The Multiple

亦凉 2022-08-07 09:51 259阅读 0赞

Find The Multiple
Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u
Submit

Status

Practice

POJ 1426
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

  1. #include <cstdio>
  2. #include <queue>
  3. using namespace std;
  4. __int64 a[205];
  5. void bfs(int n)
  6. {
  7. __int64 k;
  8. queue<__int64>Q;
  9. Q.push(1);
  10. while( !Q.empty() ){
  11. k=Q.front(); Q.pop();
  12. if(k%n==0) { a[n]=k; return; }
  13. Q.push(k*10);
  14. Q.push(k*10+1);
  15. }
  16. }
  17. void get_a()
  18. {
  19. a[0]=0; a[1]=1; a[2]=10;
  20. for(int i=3; i<=200; i++){
  21. if(i%2==0) a[i]=a[i/2]*10;
  22. else bfs(i);
  23. }
  24. }
  25. int main()
  26. {
  27. int n;
  28. get_a();
  29. while(scanf("%d", &n)!=-1 && n!=0){
  30. printf("%I64d\n", a[n]);
  31. }
  32. return 0;
  33. }

发表评论

表情:
评论列表 (有 0 条评论,259人围观)

还没有评论,来说两句吧...

相关阅读