吸血鬼数字,是指数位为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含
乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。
以两个0结尾的数字是不允许的,例如,下列数字都是'吸血鬼'数字
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
static void vampire(){ /* 思路: 1、过滤掉不符合条件的 2、将乘积结果转化为字符串去对比两个乘数 3、循环对比结果每一位字符和两个乘数字符位数 */ int max=99; //保存 Set<String> vampires=new HashSet<>(); for (int i = 10; i < max; i++) { for (int j = 10; j < max; j++) { int result=i*j; //过滤两个0结尾的数字,和<=1000的数字 if(i%10==0&&j%10==0||result<1000){ continue; } //查询result是否包含i或j String iS=i+""; String jS=j+""; //对比结果,只有全匹配通过才全部为true boolean compareResult[]=new boolean[4]; //记录该位置的值是否已经对比使用过 boolean iHasUse[]=new boolean[2]; boolean jHasUse[]=new boolean[2]; //当前索引 int index=0; for (char c : (result + "").toCharArray()) { String single=c+""; //标记是否从第一位数中找到 boolean hasFind=false; //从第一位数中查找 for (int q = 0; q < iS.toCharArray().length; q++) { if(single.equals(iS.charAt(q)+"")){ if(iHasUse[q]){//已经使用该值对比过 continue; } compareResult[index]=true; iHasUse[q]=true; hasFind=true; } } //第一位数中不存在,继续在第二位数中查找 if(!hasFind){ //从第二位数中查找 for (int q = 0; q < jS.toCharArray().length; q++) { if(single.equals(jS.charAt(q)+"")){ if(jHasUse[q]){//已经使用该值对比过 continue; } compareResult[index]=true; jHasUse[q]=true; } } } index++; } boolean isVampire = true; for (boolean b : compareResult) { if(!b){ isVampire=b; break; } } if(isVampire){ vampires.add(result+""); System.out.println("Vampire========>"+i+" * "+j+" = "+(i*j)); } } } System.out.println("吸血鬼数字=========="); for (String vampire : vampires) { System.out.println(vampire); } System.out.println("吸血鬼数字=========="); }
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- hzar.cn 版权所有 赣ICP备2024042791号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务