ThinkingInJava_吸血鬼数

package java_001;

import java.util.Arrays;

/**
 * Thinking in Java
 *吸血鬼数字是指位数为偶数的数字,可由一对数字相乘而得到,
 *这对数字各包含乘积的一半位数的数字,
 *其中从最初数字选取的数字可以任意排序
 *以两个0结尾的数字是不允许的。
 *四位数吸血鬼数字示例:1260=21*60,1827=21*87,2187=27*81……
 *编写程序列出所有的4位的吸血鬼数
 *
 *列出结果:一共7个:1260=21*60,1395=15*93,
 *1435=41*35,1530=51*30,1827=87*21,
 *2187=27*81,6880=86*80
 */

public class Xi {
    public static int[] toIntArray(int num1, int num2) {
        //两个二位数转数组
        int[] a = new int[4];
        a[0] = num1 / 10;
        a[1] = num1 % 10;
        a[2] = num2 / 10;
        a[3] = num2 % 10;
        return a;
    }

    public static int[] toIntArray(int num) {
        //四位数转数组
        int[] a = new int[4];
        a[3] = num % 10;
        a[2] = num % 100 / 10;
        a[1] = num % 1000 / 100;
        a[0] = num / 1000;
        return a;
    }

    public static void testToIntArray(int i,int j,int xi){
        int[] a = toIntArray(i, j);
        int[] b = toIntArray(xi);
        System.out.println("1:" + Arrays.toString(a));
        System.out.println("2:" + Arrays.toString(b));
    }

    public static boolean notInList(int key,int[] list,int sum){
        for (int k = 0; k < sum; k++) {
            if (list[k] == key) {
                return false;
            }
        }
        return true;
    }
    public static void main(String[] args) {
        ///*
        int[] list=new int[10];
        int sum=0;
        for(int i=11;i<100;i++){
            for(int j=10;j<100;j++){
                int xi=i*j;
                if(xi<999||xi>10000)
                    continue;
                int[] a=toIntArray(i,j);
                int[] b=toIntArray(xi);    
                Arrays.sort(a);
                Arrays.sort(b); //将a,b数组元素排序
                if(Arrays.equals(a, b) && notInList(xi, list, sum)){
                    //判断a,b数组是否相等,并且吸血鬼数不在list内(去重)
                    list[sum]=xi;
                    sum++;  
                    System.out.print(xi+",");
                }
            }
        }
        System.out.println("\nsum="+sum);
        //*/
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值