第4章 控制执行流程
“吸血鬼数字”就是指位数为偶数的数字(我们算得是4位的),可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数字,其中从偶数位数字中选取的数字可以任意排列。以两个0结尾的数字是不允许的
实现程序:
实现一
import java.util.Arrays;
public class VampireNumber {
/*
比较四位数是否与两个两位数组合相同
*/
public static boolean equals(int a,int b,int num)
{
String stra=String.valueOf(a);
String strb=String.valueOf(b);
String str=stra.concat(strb);
String strNum=String.valueOf(num);
char [] chars=str.toCharArray();
char [] charNum=strNum.toCharArray();
Arrays.sort(chars);//排序
Arrays.sort(charNum);//排序
if(Arrays.equals(chars, charNum))//比较序列是否相同
{
return true;
}
return false;
}
public static void main(String[] args) {
for(int num=1000;num<10000;num++)
{
if(0!=num%100)//非两个0结尾的四位数
{/*最大的两位整数也不超过四位数的开方*/
for(int i=10;i<(int)Math.sqrt(num);i++)
{
if(0==num%i)
{
int a=i;
int b=num/i;
if(equals(a,b,num))
{
System.out.println(num+"="+a+"*"+b);
}
}
}
}
}
}
实现二
import java.util.Arrays;
public class VampireNumber {
public static void main(String[] args) {
for(int i = 1; i < 100; i++){
for(int j = i+1; j < 100; j++){
//只要求输出四位数
if(i * j >= 1000){
String a = i + "" + j;
String b = i * j + "";
if(equal(a, b)){
System.out.printf("%d * %d = %d", i, j, i*j);
System.out.println();
}
}
}
}
}
//判断两个字符串包含的数字是否一致
private static boolean equal(String a, String b) {
//先排序
char[] as = a.toCharArray();
char[] bs = b.toCharArray();
Arrays.sort(as); //排序
Arrays.sort(bs); //排序
if(Arrays.equals(as, bs)){
return true;
}
return false;
}
}
运行结果:
1260=21*60
1395=15*93
1435=35*41
1530=30*51
1827=21*87
2187=27*81
6880=80*86
若要实现6位,8位的,可以自己修改程序。