黑马程序员技术交流社区

标题: 吸血鬼数字 [打印本页]

作者: yaodd321    时间: 2014-11-1 22:08
标题: 吸血鬼数字
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字个包含乘积的一半位数的数字,以两个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 的数字可以直接过滤掉?
作者: 姜浩    时间: 2014-11-2 00:18
学C的时候,这是一个试题。
作者: 姜浩    时间: 2014-11-2 00:19
谢谢lz分享,研究一下,必来回帖。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2