吸血鬼數(shù)字指顶掉,位數(shù)為偶數(shù),可以由一對數(shù)字相乘得到墩剖,且這對數(shù)字各包含乘積的一半位數(shù)的數(shù)字猴凹。其中,從最初的數(shù)字中選取的數(shù)字可以任意排序岭皂。以兩個0結(jié)尾的數(shù)字是不允許的郊霎。找出所有四位數(shù)的吸血鬼數(shù)字。示例如下:
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
思路:一個比較直接的思路爷绘,先遍歷四位數(shù)书劝,再拆分。但這樣做的話土至,首先拆分有點麻煩购对,其次在組合成新的兩位數(shù)時,還要考慮每個數(shù)字的先后問題(比如1和2毙籽,是組成12還是21)洞斯。本題逆向解決會比較方便,先遍歷兩位數(shù)坑赡,相乘后再判斷是否滿足條件烙如。
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型數(shù)字轉(zhuǎn)化為字符數(shù)組
int num = num1 * num2;
if (num < 1000 || num> 9999){
return -1; //乘積為非四位數(shù)
}
char[] num_c = String.valueOf(num).toCharArray();
Arrays.sort(num_p); //將字符數(shù)組排序
Arrays.sort(num_c);
String p = String.valueOf(num_p); //char[]直接比較比較麻煩,轉(zhuǎn)化成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);
}
}
}
}
}