java编程思想第四章练习10
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如,下列数字都是吸血鬼数字:
1260=21*60
1827=21*87
2187=27*81
下面代码结合了书本给出的方法和网上的一种比较方法,比较方便,求四位吸血鬼数字,比较次数为590次
import java.util.*;
public class TestDemo {
public static void main(String[] args) {
int count = 0; //计数器,用来记录比较次数
int[] begin = new int[4];
int[] target = new int[4];
ArrayList<Integer> result = new ArrayList<>(); //用arraylist排除相同的结果
for (int num1 = 10; num1 <= 99; num1++) { //只有两位数才有可能成为吸血鬼数字
for (int num2 = 10; num2 < 99; num2++) {
if ((num1 * num2) % 9 != (num1 + num2) % 9) { //书本给出的定理,筛选数字
continue;
}
count ++;
int temp = num1 * num2;
begin[0] = num1 / 10; //取出各位上的数字
begin[1] = num1 % 10;
begin[2] = num2 / 10;
begin[3] = num2 % 10;
target[0] = temp / 1000;
target[1] = (temp % 1000) / 100;
target[2] = (temp % 1000 % 100) / 10;
target[3] = temp % 1000 % 100 % 10;
Arrays.sort(begin);
Arrays.sort(target);
if (Arrays.equals(begin, target)) { //排序比较
if(!result.contains(temp)){ //排除相同的结果
result.add(temp);
System.out.println(num1 + "*" + num2 + "=" + temp);
}
}
}
}
System.out.println(count);
}
}