A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yaodd321 中级黑马   /  2014-11-1 22:08  /  749 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字个包含乘积的一半位数的数字,以两个0结尾的数字是不允许的。例如1260=12*60,1827=21*87,2187=27*81,要求找出4位数的所有吸血鬼数字。
---------------------------------------------------------------------------------------
  1. package cn.itcat.damo1;

  2. import java.util.Arrays;

  3. public class theVampire {
  4.         /**
  5.          * 一个四位的数字可以拆分成两个数字的乘积,顺序不限。 比如:1260=21*60;
  6.          *
  7.          * @author yxx
  8.          */
  9.         public static void main(String[] args) {
  10.                 getVampire_2();

  11.         }

  12.         // 高效率的写法
  13.         public static void getVampire_2() {
  14.                 String str_1[], str_2[];
  15.                 int from = 0;
  16.                 int to = 0;
  17.                 int sum = 0;
  18.                 int count = 0;
  19.                 for (int i = 10; i < 100; i++) {
  20.                         from = Math.max(1000 / i, i + 1);
  21.                         to = Math.min(10000 / i, 100);
  22.                         // 避免重复,同时保证i,j两个两位数相乘的积在1000和10000之间
  23.                         for (int j = from; j < to; j++) {
  24.                                 int i_val = i * j;
  25.                                 if (i_val % 100 == 0 || (i_val - i - j) % 9 != 0) {
  26.                                         // System.out.println("过滤数字");
  27.                                         continue;
  28.                                 }
  29.                                 //将乘积和两个乘数的数字存入字符串数组
  30.                                 str_1 = String.valueOf(i_val).split("");
  31.                                 str_2 = (String.valueOf(i) + String.valueOf(j)).split("");
  32.                                 //将字符从小到大排序
  33.                                 Arrays.sort(str_1);
  34.                                 Arrays.sort(str_2);
  35.                                 //如果两个字符串数组相同,则是吸血鬼数字
  36.                                 if (Arrays.equals(str_1, str_2)) {
  37.                                         sum++;
  38.                                         System.out.println("第" + sum + "组::" + i + "*" + j + "="
  39.                                                         + i_val);
  40.                                         ++count;

  41.                                 }
  42.                         }

  43.                 }
  44.                 System.out.println("一共" + count + "组吸血鬼");

  45.         }
  46. }
复制代码


从网上找的方法,我将自己理解的代码写在注释里,但是为什么判断条件中瞒住(i_val - i - j) % 9 != 0 的数字可以直接过滤掉?

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

2 个回复

倒序浏览
学C的时候,这是一个试题。
回复 使用道具 举报
谢谢lz分享,研究一下,必来回帖。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马