/**
* VampireNumber.java
* Ex 10 Page 75
* 吸血鬼数字算法    
*
* 所谓“吸血鬼数字”就是指位数为偶数的数字(我们算得是4位的),可以由一对数字相乘而得到,    
* 而这对数字各包含乘积的一半位数字,其中从偶数位数字中选取的数字可以任意排列。    
* 以两个0截尾的数字是不允许的。例如:1260=21*60 1827=21*87 2187=27*81        
*/

package ch4;

public class VampireNumber {
   int count = 0;
   private void vampire(Long num){
     //把数字转换为字符串
    String strNum = String.valueOf(num);
     //把字符串拆分为字符数组,得到数字的位数
     int numLength = strNum.split("").length - 1;
     //按吸血鬼法则进行拆分
     for ( int i = ( int)Math.pow(10, numLength/2 - 1); i <= ( int)Math.pow(10, numLength); i ++ ) {
       for ( int j = i + 1; j <= Math.pow(10, numLength/2); j ++) {
         //若乘积等于该数字,则生成数组后比较,若相等,则输出
         if (i * j == num) {
          String[] strArray1 = String.valueOf(num).split("");
          String[] strArray2 = (String.valueOf(i) + String.valueOf(j)).split("");
           //sort();按升序排列
          java.util.Arrays.sort(strArray1);
          java.util.Arrays.sort(strArray2);
           if (java.util.Arrays.equals(strArray1, strArray2)) {
            count ++;
            System.out.println( "第" + count + "组:" + i + " * " + j + " = " + num);
          }
        }
      } //End for
    } //End for
      }
   public static void main(String[] args) {
    VampireNumber vn = new VampireNumber();
     for (Long i = 1000L; i <= 10000; i ++){
      vn.vampire(i);
      }
        
  }
}
/**
* Output:
* 第1组:21 * 60 = 1260
  第2组:15 * 93 = 1395
  第3组:35 * 41 = 1435
  第4组:30 * 51 = 1530
  第5组:21 * 87 = 1827
  第6组:27 * 81 = 2187
  第7组:80 * 86 = 6880
*/