POJ1426 广搜

Find The Multiple
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 23556 Accepted: 9723 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


遇到的问题和解决思路:

        这个题目给的output貌似有点问题。。。表示个人AC出来的6是1110,19也不是上面这个数字。

        首先看到这道题目的时候有点蒙,反正只要是看不出来的第一反应都是广搜,只不过不知道怎么办罢了,因为题目给的是100位,然而longlong貌似又不够,于是就有点犹豫。倒是队列这里,需要清空。TAT,表示清空不会,于是就只能把全局变量定义成局部变量了。到时候百度看看再放到评论这里吧。

        还有,一定要用G++交,c++交就超时了。。。貌似poj的C++比较陈旧

       

给出AC代码:

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#define inf 1000000000

using namespace std;

int n;

long long res;

long long bfs(){
	queue <long long > que;//没有定义成局部变量就一直WA    =.= 
	que.push(1);
	while(que.size()){
		res = que.front();
		//printf("%I64d\n",res);
		que.pop();
		if(res % n == 0)break;
		que.push(res * 10 + 1);
		que.push(res * 10);
		
	}
	//printf("%I64d\n",res);
	return res;
}


void solve(){
	printf("%I64d\n",bfs());
}

int main(){
	while(scanf("%d",&n)!=EOF){
		if(n == 0)break;
		solve();
	}
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值