Java编程思想吸血鬼数字实现

Desciption

吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘得到,而这对数字的位数是原数字的一半位数,并且由组成原数字的各个位数组成,以两个0结尾的数字不是吸血鬼数字。
例如:1260 = 21 * 60 1827 = 21 * 87 2187= 27 * 81
求所有四位吸血鬼数字

求解思路

假设value=i*j (其中i < j,10 <= i <= 99)
判断j的循环范围,就至少需要两者的乘积可以构成四位数,两位数字的范围是1000/i到10000/i。
为了避免出现重复的乘积,还需和i+1比较大小。
假设value = 1000a + 100b + 10c + d, 因为满足val = i * j,
则有x = 10a + b, y = 10c + d(这里的只是对一种情况进行假设 可以是10a+d 10c+b)
则value - i - j = 990a + 99b = 9 * (110a + 11b), 所以value - i - j能被9整除,
其他的数位组合也是一样的
所以满足该条件的数字必定能被9整除,所以可以直接过滤其他数字。

实现

 public static void getVempire() {
        int count = 0; //记录循环次数
        int sum = 0;//记录组数
        String[] sij, sv;//sij记录乘数组成的字符串数组,sv记录value组成的字符串数组
        int value;
        int from;
        //双重循环
        for (int i = 10; i < 100; i++) {
            // j=i+1避免重复
            // 这里主要是为了让 i * j >= 1000的意思
            from = Math.max(1000 / i, i + 1);
            for (int j = from; j < 100; j++) {
                value = i * j;
                //关键代码
                // 满足条件的整数必定能被9整除
                if ((value - i - j) % 9 != 0 || value % 100 == 0)//value后两位不能为0
                    continue;
                count++;
                sij = (String.valueOf(i) + j).split("");
                sv = String.valueOf(value).split("");
                Arrays.sort(sij);
                Arrays.sort(sv);
                if (Arrays.equals(sij, sv)) {// 排序后比较,为真则找到一组
                    sum++;
                    System.out.println("第" + sum + "组: " + i + "*" + j + "=" + value);
                }
            }
        }
        System.out.println("共找到" + sum + "组吸血鬼数");
        System.out.println("一共运行" + count + "次");

    }

运行结果

image.png

参考博客
https://blog.csdn.net/sinat_37976731/article/details/78526067
https://www.cnblogs.com/wenjieyatou/p/5913253.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 吸血鬼数字指,位数为偶数,可以由一对数字相乘得到,且这对数字各包含乘积的一半位数的数字。其中,从最初的数字中选取的...
    Jocelyn_b0e1阅读 950评论 0 0
  • 简单了解吸血鬼数 今天看文档,突然看到一个奇怪的名字——“吸血鬼数”。大概查了一下,这种数字有正常的吸血鬼数,伪吸...
    Alisallon阅读 1,169评论 0 1
  • 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中...
    海边的蜗牛ng阅读 495评论 0 0
  • 准备: java编程思想电子版[https://www.cnblogs.com/buwuliao/p/807321...
    卡斯特梅的雨伞阅读 310评论 0 1
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,588评论 28 53