吸血鬼数字

题目:吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而对数字各包含乘积的一半数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,列如:
1260=21*60;
1827=21*87;
2187=27*81;
请写出一个程序,找出所有的4位吸血鬼数字。
解:反过来想,
不从考虑某个数(1001到9999)是不是吸血鬼数,而是遍历2位数相乘,看是否符合某种规则,符合的话,他们的积就是吸血鬼数

package test1;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 吸血鬼数字:位数为偶数,可以由一对数字相乘而得,这对数字分别是吸血鬼数字的一半位数的,顺序不规定<br>
 * 1260=12*60, 1827=21*87
 */
public class Vampire {

    public static void main(String[] args) {
        System.out.printf("Please enter the length of the num : ");
        Scanner s = new Scanner(System.in);
        int x = s.nextInt();
        calVampire(x);
    }

    public static void calVampire(int n) {
        if (n % 2 != 0)
            return;
        else {
            int subLength = n / 2;
            int total = 0;
            int min = (int) Math.pow(10, subLength - 1);
            int max = (int) Math.pow(10, subLength) - 1;
            for (int p = min; p <= max; p++) {
                for (int k = p + 1; k <= max; k++) {
                    int val = p * k;
                    if (val > 9999 || val < 1000)
                        continue;
                    String[] s1 = String.valueOf(val).split("");
                    String[] s2 = (String.valueOf(p) + String.valueOf(k))
                            .split("");
                    Arrays.sort(s1);
                    Arrays.sort(s2);
                    if (Arrays.equals(s1, s2)) {
                        total++;
                        System.out.println(p + " * " + k + "=" + val);
                    }
                }
            }
            System.out.println("Total num is : " + total);
        }
    }

}

posted on 2012-05-15 09:53  timelyxyz  阅读(398)  评论(0编辑  收藏  举报

导航