poj1426解题报告

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' '0'组成)
思路:BFS 假设M不符合 则在M基础上有两种情况M1和M0 将这两种情况都入队,然后求出符合条件的M
#include<iostream>
using namespace std;
char queue[10000000];
int head,rear,n;
char *pop()
{
		return &queue[head++%10000000];
}
void push(char i){queue[rear++%10000000]=i;}

void bfs()
{
	int i;
	while(head!=rear)
	{
		int mod=0,lenth;
		lenth=*pop();	
		for(i=1;i<=lenth;i++)
			mod=(10*mod+(*pop()-48))%n;
		if(mod==0)
		{
			for(i=lenth;i>0;i--)
				cout<<queue[(100000000+head-i)%100000000];
	//		cout<<endl<<head;
			cout<<endl;
			return;
		}
		else
		{
			push(lenth+1);
			for(i=lenth;i>0;i--)
				push(queue[(100000000+head-i)%100000000]);
			push('1');
			push(lenth+1);
			for(i=lenth;i>0;i--)
				push(queue[(100000000+head-i)%100000000]);
			push('0');
		}
	}
}

int main()
{
	while(cin>>n&&n)
	{
		head=rear=0;
		push(1);	push('1');
		bfs();
	}
	return 0;
} 
 

你可能感兴趣的:(File,Integer,input,each,output)