JAVA 吸血鬼数字学习

       什么是吸血鬼数字:吸血鬼数字是指位数为偶数的数字。可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,选取的数字可以任意排序。以两个0结尾的数字是不允许的。    举例说明如下:

1260 = 21 * 60

1827 = 21 * 87

2187 = 27 * 81

     我们根据通过找四位数的吸血鬼数字来分析。

 

     首先,一个四位数的吸血鬼数字必须由两个10~100之间的数相乘得到。如果两个数相乘得到的数为val = 1000a + 100b + 10c + d,假设其中一个数为 i = 10a + b, 另一个数为 j = 10d + c,则所要满足的吸血鬼数字的条件之一是(val-i-j%9 == 0,这一点不管是abcd如何匹配成ij都满足,还有一点可以排除是非吸血鬼数字的就是val%100 != 0,因为吸血鬼数字以两个0结尾是不允许的。这只是排除的第一步,有利于减少算法的复杂性。

     第二步就是通过split函数将刚才的数字经行拆分,并通过sort函数来排序,如果val拆分为四个数字后和(i+j)(在此为字符串)拆分后排序结果相同,则证明该数字val是吸血鬼数字。简单的描述如下:String [] str1 = String.valueOf(val).split(“”);

  String [] str2 = (String.valueOf(i)+String.valueOf(j)).split(“”);

Arrays.sort(str1);

Array.ssort(str2);

If(Arrays.equals(str1,str2))

......

在此需要特别说明的是split函数。这里只做简要说明,详细可参考http://hi.baidu.com/zh821221/item/fec5265d342f679708be17bc或在java api文档中查看。使用String.split(“”)函数可将数字划分,诸如i = 10a +bab可以划分为数字a和数字b

      好了,下面写代码,由于是初学者,代码很渣,如有问题,恳请指教。

import java.util.*;

public class Vampire{
	public static void main(String[] args){
		String [] str1, str2;
		int count = 1;
		for(int i = 10; i < 100; i++)
			for ( int j = i+1; j < 100; j++){
				int val = i * j;
				if(val%100 == 0 || ((val-i-j)%9 != 0))
				{
					continue;
				}
				str1 = String.valueOf(val).split("");
				str2 = (String.valueOf(i)+String.valueOf(j)).split("");
				Arrays.sort(str1);
				Arrays.sort(str2);
				if(Arrays.equals(str1,str2)){
					System.out.println("第"+count+"组 :"+val+" = "+ i+"*"+j);
					count += 1;
				}
			}
	}
}



运行结果为:

第1组 :1395 = 15*93

第2组 :1260 = 21*60

第3组 :1827 = 21*87

第4组 :2187 = 27*81

第5组 :1530 = 30*51

第6组 :1435 = 35*41

第7组 :6880 = 80*86



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值