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

第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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值