P75,练习10
1994年柯利弗德·皮寇弗在Usenet社群sci.math的文章中首度提出吸血鬼数。后来皮寇弗将吸血鬼数写入他的书Keys to Infinity的第30章。
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。
以两个0结尾的数字是不允许的,例如,下列数字都是“吸血鬼”数字:
1260 = 21 * 60 1827 = 21 * 87 2187 = 27 * 81
找出所有四位数的吸血鬼数字
首先。四位数的吸血鬼数字必须是两个两位数的乘积,可以用两层循环,得到所有两位数的乘积。最关键的部分是判断该乘积是不是由这两个两位数的数字所组成。我用的方法是将数字转换为字符串,然后将字符串转换为字符数组,对两个字符数组进行排序,比较排序之后的结果是不是相等。
代码如下:
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class XiXueGuiNumber { public void calcu(){ int first = 10; int second = 10; int multi; for (; first < 100; first++) { for (second = 100; second >= first; second--) { multi = first * second; if (multi % 100 == 0) { continue; } if (multi > 9999) { continue; } isXiXueGui(multi, first, second); } } } public void isXiXueGui(int toTest,int first,int second){ List<Character> cheng = new ArrayList<Character>(); for (Character character : String.valueOf(first).toCharArray()) { cheng.add(character); } for (Character character : String.valueOf(second).toCharArray()) { cheng.add(character); } List<Character> result = new ArrayList<Character>(); for (Character character : String.valueOf(toTest).toCharArray()) { result.add(character); } Collections.sort(cheng); Collections.sort(result); if (cheng.equals(result)) { System.out.println(toTest + " = " + first + " * " +second); } } public static void main(String[] args) { // TODO Auto-generated method stub XiXueGuiNumber xiXueGuiNumber = new XiXueGuiNumber(); xiXueGuiNumber.calcu(); } }
网上还找到一篇文章也是吸血鬼数字的算法,要看点这里
原文地址:http://www.cnblogs.com/reading-coding/p/3841821.html