Find The Multiple
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
Hint:
即找到一个是n(0<n<200)的倍数且由‘0’和‘1’组成的数,注意此数不可超过unsigned long long的范围,用DFS,BFS均可求解
///BFS
#include <iostream>
#include <queue> using namespace std; long long BFS(int n) ///注意返回的一定是long long类型的,否则WA { long long m, m1,m2; queue<long long>q; q.push(1); while(!q.empty()) { m=q.front(); q.pop(); if(m%n==0) return m; m1=m*10; m2=m*10+1; q.push(m1); q.push(m2); } return 0; } int main() { int n; while(cin>>n&&n) { cout<<BFS(n)<<endl; } return 0; }
DFS:
#include <iostream> using namespace std; int n,flat; unsigned long long b; void DFS(unsigned long long a,int step) { if(flat||step==19)///unsigned long long整数有二十位,unsigned即signed的两倍 ///例如:unsigned long long:0-18446744073709551615(20位),signed long long:(-+)9223372036854775807(19位) { return ; } if(a%n==0) { printf("%I64u\n",a);///I64U:64位无符号整数 flat=1;///提前终止回溯,防止输出多余的a. } else { DFS(a*10,step+1); DFS(a*10+1,step+1); } return ; } int main() { while(scanf("%d",&n),n) { flat=0; DFS(1,0); } return 0; } |
POJ-Find The Multiple
最新推荐文章于 2019-10-01 10:53:23 发布