吸血鬼数字指,位数为偶数,可以由一对数字相乘得到,且这对数字各包含乘积的一半位数的数字。其中,从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的。找出所有四位数的吸血鬼数字。示例如下:
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
思路:一个比较直接的思路,先遍历四位数,再拆分。但这样做的话,首先拆分有点麻烦,其次在组合成新的两位数时,还要考虑每个数字的先后问题(比如1和2,是组成12还是21)。本题逆向解决会比较方便,先遍历两位数,相乘后再判断是否满足条件。
import java.util.Arrays;
public class vampireNum {
public static int isVampire(int num1, int num2){
char[] num_p = (String.valueOf(num1) + String.valueOf(num2)).toCharArray();
//将一对int型数字转化为字符数组
int num = num1 * num2;
if (num < 1000 || num> 9999){
return -1; //乘积为非四位数
}
char[] num_c = String.valueOf(num).toCharArray();
Arrays.sort(num_p); //将字符数组排序
Arrays.sort(num_c);
String p = String.valueOf(num_p); //char[]直接比较比较麻烦,转化成String再比较
String c = String.valueOf(num_c);
if (p.equals(c)){
return num;
}
return -1;
}
public static void main(String[] args){
for (int i = 10; i <= 99; i++){
for(int j = i; j<=99; j++){
int result = isVampire(i,j);
if(result!=-1){
System.out.println(result);
}
}
}
}
}