找出四位数的所有吸血鬼数字(JAVA)
2016-11-08 18:52
405 查看
/**
* 找出四位数的所有吸血鬼数字
* 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序.
* 以两个0结尾的数字是不允许的。
* 例如下列数字都是吸血鬼数字
1260=21*60
1827=21*87
2187=27*81
…
* 比较笨的低效率的做法: 遍历所有四位数, 每生成一个四位数的时候,
* 在双重循环遍历两位数,在两位数的内层循环中判断是否与最外层循环的四位数相等。 如果相等把这些数字都存放到数组,进行排序后比较
* 两组数字,如果相等那么输出这个数就是要找的数字;
*/
了解下这个英文参考:吸血鬼数字
An important theoretical result found by Pete Hartley:
1. If x·y is a vampire number then x·y == x+y (mod 9) Proof: Let mod be the binary modulo operator and d(x) the sum of the decimal
digits of x.
2. It is well-known that d(x) mod 9 = x mod 9, for all x.
Assume x·y is a vampire.
3.Then it contains the same digits as x and y,and in particular d(x·y) = d(x)+d(y).
4.This leads to:
(x·y) mod 9 = d(x·y) mod 9 = (d(x)+d(y)) mod 9 = (d(x) mod 9 + d(y) mod 9) mod 9 = (x mod 9 + y mod 9) mod 9 = (x+y) mod 9
The solutions to the congruence are (x mod 9, y mod 9) in {(0,0),
(2,2), (3,6), (5,8), (6,3), (8,5)} Only these cases (6 out of 81) have
to be tested in a vampire search based on testing x·y for different
values of x and y.
public class Exercise10 {
JAVA实现:
* 找出四位数的所有吸血鬼数字
* 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序.
* 以两个0结尾的数字是不允许的。
* 例如下列数字都是吸血鬼数字
1260=21*60
1827=21*87
2187=27*81
…
* 比较笨的低效率的做法: 遍历所有四位数, 每生成一个四位数的时候,
* 在双重循环遍历两位数,在两位数的内层循环中判断是否与最外层循环的四位数相等。 如果相等把这些数字都存放到数组,进行排序后比较
* 两组数字,如果相等那么输出这个数就是要找的数字;
*/
了解下这个英文参考:吸血鬼数字
An important theoretical result found by Pete Hartley:
1. If x·y is a vampire number then x·y == x+y (mod 9) Proof: Let mod be the binary modulo operator and d(x) the sum of the decimal
digits of x.
2. It is well-known that d(x) mod 9 = x mod 9, for all x.
Assume x·y is a vampire.
3.Then it contains the same digits as x and y,and in particular d(x·y) = d(x)+d(y).
4.This leads to:
(x·y) mod 9 = d(x·y) mod 9 = (d(x)+d(y)) mod 9 = (d(x) mod 9 + d(y) mod 9) mod 9 = (x mod 9 + y mod 9) mod 9 = (x+y) mod 9
The solutions to the congruence are (x mod 9, y mod 9) in {(0,0),
(2,2), (3,6), (5,8), (6,3), (8,5)} Only these cases (6 out of 81) have
to be tested in a vampire search based on testing x·y for different
values of x and y.
public class Exercise10 {
JAVA实现:
public static void main(String[] args) { // TODO 自动生成的方法存根 int num1, num2, result, i, j, count = 0; int[] predata = new int[4]; int[] lastdata = new int[4]; for(num1 = 10; num1 < 99; num1++) for(num2 = num1; num2 < 99; num2++){ result = num1 *num2; count = 0; if(((num1 * num2) %9) !=((num1 + num2) %9)) continue; predata[0] = num1 / 10; predata[1] = num1 % 10; predata[2] = num2 / 10; predata[3] = num2 % 10; lastdata[0] = result / 1000; lastdata[1] = (result % 1000) / 100; lastdata[2] = (result % 1000 % 100) / 10; lastdata[3] = (result % 1000 % 100 % 10); for(i = 0; i < 4 ; i++) for(j = 0; j < 4; j++){ if(predata[i] == lastdata[j]){ count++; predata[i] = -1; lastdata[j] = -2; } } if(count == 4) System.out.println(num1 +" * " + num2 + " = "+ result); } } }
相关文章推荐
- Java 找出四位数的所有吸血鬼数字 基础代码实例
- java 找出4位数的所有吸血鬼数字
- Java 找出四位数的所有吸血鬼数字 基础代码实例
- JAVA找出4位数的所有吸血鬼数字
- JAVA 编程思想 找出所有四位数的吸血鬼数字
- 找出4位数的所有吸血鬼数字
- java编程随笔——找出4位数的所有吸血鬼数字
- 找出4位数的所有吸血鬼数字
- 找出所有的4位数的吸血鬼数字
- java编程随笔——找出4位数的所有吸血鬼数字
- Java 找出四位数的全部吸血鬼数字 基础代码实例
- 找出四位数的吸血鬼数字:类似1260=21*60
- java 找出小于数字N的所有素数
- Java 欧拉工程 第三十篇【 找出所有能够写成各位数字5次方之和的数之和】
- java读取只含字母和数字的文本文档并找出所有字母及各字母的个数
- Java开发练习1,打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153 是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
- [置顶] 关于四位数的“吸血鬼数字”java写法和c的写法
- 找出所有六位数的平方数中未出现与原数中重复数字的所有数
- 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如: 153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。(java)
- java求吸血鬼数字算法 。。。