POJ1426 - Find The Multiple (Java代码+注释)

 题目描述

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.

时间来到2210年,科学家终于发明出了与二进制星人沟通的方式。二进制星人只能理解完全由1和0组成的数字,聪明的科学家发现,如果想表示数字n,只要用数字1和数字0写出一个为n的倍数的数字,把它拿给二进制星人看,他们就能理解了。如想表示6这个数字,只要拿着“100100100100100100”(6的16683350016683350倍)给二进制星人看,他就会明白这是6的意思了。给出n,请你模拟这一过程。
提示:本题采用Special Judge,你无需输出所有符合条件的m,你只需要输出任一符合条件的m即可。

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.

输入包含多组数据,每组数据仅一行,只包含一个正整数n,n==0时输入结束 (1 <= n <= 200).

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.

对于输入的每组n,都输出任一符合条件的m,m为只由1和0构成的十进制数,且m是n的倍数。即使有多个符合条件的m,你也只需要输出一个即可。

Sample

Input

2
6
19
0

Output

10
100100100100100100
111111111111111111

dfs(暴力)

    static class TaskA {
        int n;
        long bfs(){
            Queue<Long> q = new LinkedList<>();
            q.offer(1L);
            while (!q.isEmpty()){
                long res = q.poll();
                if(res % n == 0){
                    return res;
                }
                //末尾加0或加1两种情况
                q.offer(res*10);
                q.offer(res*10+1);
            }
            return 0;
        }
        public void solve(int testNumber, InputReader in, PrintWriter out) {
            //会时间超限,因此直接把200个m输出存入一个数组
            for (int i = 1; i <= 200; i++) {
                n = i;
                out.print(bfs()+" ");
            }

        }
    }
String s = "1 10 111 100 10 1110 1001 1000 111111111 10 11 11100 1001 10010 1110 10000 11101 1111111110 11001 100 10101 110 110101 111000 100 10010 1101111111 100100 1101101 1110 111011 100000 111111 111010 10010 11111111100 111 110010 10101 1000 11111 101010 1101101 1100 1111111110 1101010 10011 1110000 1100001 100 100011 100100 100011 11011111110 110 1001000 11001 11011010 11011111 11100 100101 1110110 1111011111 1000000 10010 1111110 1101011 1110100 10000101 10010 10011 111111111000 10001 1110 11100 1100100 1001 101010 10010011 10000 1111111101 111110 101011 1010100 111010 11011010 11010111 11000 11010101 1111111110 1001 11010100 10000011 100110 110010 11100000 11100001 11000010 111111111111111111 100 101 1000110 11100001 1001000 101010 1000110 100010011 110111111100 1001010111 110 111 10010000 1011011 110010 1101010 110110100 10101111111 110111110 100111011 111000 11011 1001010 10001100111 11101100 1000 11110111110 11010011 10000000 100100001 10010 101001 11111100 11101111 11010110 11011111110 11101000 10001 100001010 110110101 100100 10011 100110 1001 1111111110000 11011010 100010 1100001 11100 110111 11100 1110001 11001000 10111110111 10010 1110110 1010100 10101101011 100100110 100011 100000 11101111 11111111010 1010111 1111100 1111110 1010110 11111011 10101000 10111101 111010 1111011111 110110100 1011001101 110101110 100100 110000 100101111 110101010 11010111 11111111100 1001111 10010 100101 110101000 1110 100000110 1001011 1001100 1010111010111 110010 11101111 111000000 11001 111000010 101010 110000100 1101000101 1111111111111111110 111000011 1000";
                String[] ss = s.split(" ");
                while (in.hasNext()){
                    int n = in.nextInt();
                    if(n == 0){
                        break;
                    }
                    out.println(ss[n - 1]);//直接寻找m
                }

 

题目链接

Find The Multiple - POJ 1426 - Virtual Judge (vjudge.net)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值