寄生虫数字JAVA程序
吸血鬼数字JAVA程序
看《Thinking in Java》,第四章最后面的那个练习题(练习10)吸血鬼数字:
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如,下列数字都是“吸血鬼”数字:
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
自己写的代码,算法比较简单,但还是达到要求:
public class xxgNUM { /** * 判断 * * @param num * @return */ private boolean xxg(int num) { int a[] = new int[4]; // 千位 a[0] = (int) num / 1000; // 百位 a[1] = (int) ((num - a[0] * 1000) / 100); // 十位 a[2] = (int) ((num - a[0] * 1000 - a[1] * 100) / 10); // 个位 a[3] = (int) (num - a[0] * 1000 - a[1] * 100 - a[2] * 10); // 如果后两位是0,直接返回 if (a[2] == 0 && a[3] == 0) { return false; } // 脚标全排列 for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { for (int k = 0; k < 4; k++) { for (int l = 0; l < 4; l++) { // 四个数不重复 if (i != j && i != k && i != l && j != k && j != l && j != l && k != l) { int n1 = a[i] * 10 + a[j]; int n2 = a[k] * 10 + a[l]; if (n1 * n2 == num) { System.out.println(num + "=" + n1 + "x" + n2); return true; } } } } } } return false; } // 程序入口 public static void main(String[] args) { xxgNUM xxg = new xxgNUM(); for (int num = 1000; num < 10000; num++) { xxg.xxg(num); } } }
四位数一共有七组:
1260=21x60
1395=15x93
1435=41x35
1530=51x30
1827=87x21
2187=27x81
6880=86x80