《Java 编程思想》-第4章 控制执行流程 笔记

来源:互联网 发布:可靠性仿真软件 编辑:程序博客网 时间:2024/05/23 10:29

第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位的,可以自己修改程序。

0 0