《java编程思想》读后笔记:二,吸血鬼数字
书本p75中一道读后练习思考题,题目如下:
吸血鬼数字是指位数为偶数的数字,可以有一对数字相乘得到,而这对数字各包含成绩的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。一两个0结尾的数字是不允许的,例如,下列数字都是“吸血鬼数字”:
1260=21*60,1827=21*87,2187=27*81
写一个程序,找出4位数的所有吸血鬼数字。
个人代码:
public static void main(String[] args) {Map<String,String> map = new HashMap<String,String>();
for (Integer i = 10; i < 100; i++) { //两个数一定都是两位数
for (Integer j = 10; j < 100; j++) {
Integer total = i * j; //计算乘积
if(total>999 && total<10000){ //判断是否是4位数
String totalStr = total.toString(); //将当前数字转成字符串
if(total % 100 != 0){ //排除以两个0结尾的情况
String iStr = i.toString();
String jStr = j.toString();
String ijStr = iStr + jStr; //将当前俩个数拼成4个字符的字符串
List<Character> list = new ArrayList<Character>();
for(int x=0;x<totalStr.length();x++){
list.add(totalStr.charAt(x)); //将两数乘积的四个数字放入list中
}
int state = 0;
for(int x=0;x<ijStr.length();x++){
if(list.contains(ijStr.charAt(x))){ //遍历两数组成的字符串每个数字
int indexX = list.indexOf(ijStr.charAt(x)); //当list中含有当前数字时,从list中删除当前数字字符
list.remove(indexX); //并且记录重复数字
state ++;
}
}
if(state == 4){
String resultStr = totalStr + " = " + iStr + "*" + jStr; //state==4说明,乘积中含有两个数组成的所有数字字符
map.put(totalStr, resultStr); //以乘积为key,等式为value存入,达到去重效果
}
}
}
}
}
Set<String> keySet = map.keySet();
for(String key:keySet){
System.out.println(map.get(key)); //打印结果
}
}
输出结果:
1435 = 41*351260 = 60*21
2187 = 81*27
1395 = 93*15
1530 = 51*30
6880 = 86*80
1827 = 87*21
我的解决代码如上,暂时还没想到更简便的解决方案,如果朋友感兴趣,可以多交流。
以上是 《java编程思想》读后笔记:二,吸血鬼数字 的全部内容, 来源链接: utcz.com/z/392897.html