在看《Thinking In Java》,有一题是求4位数的吸血鬼数,这里做个笔记。
题目来自:《Java编程思想》
首先解释一下吸血鬼数字:吸血鬼数字是指位数为偶数的数字,可由一对数字相乘而得到,这对数字各包含乘积的一半位数的数字,以两个0结尾的数字是不允许的。
四位数吸血鬼数字示例:1260=21*60,1827=21*87,2187=27*81……
先列出结果:一共7个:1260=21*60,1395=15*93,1435=41*35,1530=51*30,1827=87*21,2187=27*81,6880=86*80。
总的来说,就是求一个 两位数*两位数=四位数,其中四位数的四个数字是那两个两位数中的。
知道这个原理,代码实现就相对简单啦。
- import java.util.Arrays;
- public class Test10 {
- /**
- * 求4位数的吸血鬼数
- * 思想:将两位数*两位数,然后把四位数的结果的所有数字取出来并排序
- * 与i和j的数字组合排序比较,如果相等则是
- */
- public static void printVampireNumber() {
- int result;
- String[] resultNum = null;
- String[] mulNum = null;
- for(int i=10;i<100;i++) {
- for(int j=i+1;j<100;j++) {//不存在ab*ab=abab,所有可以直接j+1开始
- result = i*j;
- if(result<1000 || result>9999) {continue;}
- //1、将四位数拆分为数组,如1827 变成 [1,8,2,7]
- resultNum = String.valueOf(result).split("");
- //对其排序
- Arrays.sort(resultNum);
- //2、将i和j组合,并转为数组
- mulNum = (String.valueOf(i)+String.valueOf(j)).split("");
- //对其排序
- Arrays.sort(mulNum);
- //3、比较大小是否相等
- if(Arrays.equals(resultNum,mulNum)) {
- System.out.println(result);
- }
- }
- }
- }
- public static void main(String args[]) {
- printVampireNumber();
- }
- }
题目来自:《Java编程思想》
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏