给定正整数N,求最小的正整数M,使N*M十进制表示中只有0和1.扩展问题:
1.对于任意的N,一定存在M,使得N * M的乘积的十进制表示只有0和1吗?
2.怎样找出满足题目要求的N和M,使得N * M < 2^16,且N+M最大?

解决方案 »

  1.   


    // 给定正整数N,求最小的正整数M,使N*M十进制表示中只有0和1.
    public static int only01(int n) {
    int m = 0;
    while(!checkOnly01(++m*n)) ;
    return m;
    }

    public static boolean checkOnly01(int i) {
    while(i > 0) {
    if(i%10 >= 2)
    return false;
    i /= 10;
    }
    return true;
    }
      

  2.   


    public static int only01(int n) {
    int[] arr = {1};
    int[] tmp;
    while(true) {
    tmp = new int[arr.length*2];
    for(int i=0; i<arr.length; i++) {
    System.out.println(arr[i]);
    if(arr[i] % n == 0)
    return arr[i]/n;
    tmp[i*2] = arr[i]*10;
    tmp[i*2+1] = tmp[i*2] + 1;
    }
    arr = tmp;
    }
    }
      

  3.   

    想法很妙,但是没有考虑溢出,用BigInteger就好了