黑马程序员技术交流社区
标题:
吸血鬼数字
[打印本页]
作者:
yaodd321
时间:
2014-11-1 22:08
标题:
吸血鬼数字
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字个包含乘积的一半位数的数字,以两个0结尾的数字是不允许的。例如1260=12*60,1827=21*87,2187=27*81,要求找出4位数的所有吸血鬼数字。
---------------------------------------------------------------------------------------
package cn.itcat.damo1;
import java.util.Arrays;
public class theVampire {
/**
* 一个四位的数字可以拆分成两个数字的乘积,顺序不限。 比如:1260=21*60;
*
* @author yxx
*/
public static void main(String[] args) {
getVampire_2();
}
// 高效率的写法
public static void getVampire_2() {
String str_1[], str_2[];
int from = 0;
int to = 0;
int sum = 0;
int count = 0;
for (int i = 10; i < 100; i++) {
from = Math.max(1000 / i, i + 1);
to = Math.min(10000 / i, 100);
// 避免重复,同时保证i,j两个两位数相乘的积在1000和10000之间
for (int j = from; j < to; j++) {
int i_val = i * j;
if (i_val % 100 == 0 || (i_val - i - j) % 9 != 0) {
// System.out.println("过滤数字");
continue;
}
//将乘积和两个乘数的数字存入字符串数组
str_1 = String.valueOf(i_val).split("");
str_2 = (String.valueOf(i) + String.valueOf(j)).split("");
//将字符从小到大排序
Arrays.sort(str_1);
Arrays.sort(str_2);
//如果两个字符串数组相同,则是吸血鬼数字
if (Arrays.equals(str_1, str_2)) {
sum++;
System.out.println("第" + sum + "组::" + i + "*" + j + "="
+ i_val);
++count;
}
}
}
System.out.println("一共" + count + "组吸血鬼");
}
}
复制代码
从网上找的方法,我将自己理解的代码写在注释里,但是为什么判断条件中瞒住(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