一.四位数的吸血鬼数的实现:
import java.util.Arrays;
public class test1 {
public static void main(String[] args){
System.out.println("总数:"+Judge(1000,9999));
}
/*
* @param begin 吸血鬼数范围集合 下限
* @param last 吸血鬼数范围集合 上限
*/
public static int Judge(int begin,int last){
int Sum = 0;
int big_Border = (int) Math.sqrt(last+1) - 1;//吸血鬼数的因数集合 上范围
int little_Border = (big_Border + 1)/10; //吸血鬼数的因数集合 下范围
for(int i = begin;i<last;i++){
for(int j=little_Border;j <= big_Border;j++){
boolean b = j%10!=0 || (i/j)%10!=0;//两个因数不能同时以0结尾
//整除 && 两个因数都只能是两位数 && b
if( (i%j==0) && (i/j <= big_Border) && b ){
//将两个因数拼接成字符串,并得到byte数组
byte[] alls = (j+""+(i/j)).getBytes();
byte[] nums = (i+"").getBytes();//将被除数转为byte数组
Arrays.sort(alls);//排序
Arrays.sort(nums);
//排序后转为字符串,从而得知两个因数是否由完全由被除数构成
if(Arrays.toString(alls).equals(Arrays.toString(nums))){
System.out.println(j +" * "+i/j+" = "+i);
Sum++;
break;
}
}
}
}
return Sum;
}
}
执行结果如下1000~~9999之间一共有七个吸血鬼数:
二.知识点、常用方法:
1.取平方根Math.sqrt();
2.取多次幂Math.pow(NumA,NumB);
3.三目运算:Value v_1 = (bool表达式)?value1:value2;
4.java基本类型自动转换:窄的类型可以自动转为宽的类型(int可以转为long),但是从long到int必须强制转换,并且会伴随着信息的丢失;
5.随机数:Random random = new Random(int 随机数因子);
random.nextInt(Max_int); //0 ~~~ (Max_int-1)
6.break和continue:
break 跳出整个循环;continue跳过本次循环剩余的操作,直接进入下一次循环;
break + label:跳出label标签标记的那个循环(可以实现跳出多重循环)
continue + label: 跳过label标签标记的循环的本次循环剩余代码,直接进入该被标记循环的下一轮循环。