/**
* 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
*/
* 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
*/
转载于:https://blog.51cto.com/violetsky/354619