看Java编程思想的时候看到了这个吸血鬼数,感觉比较有意思就想写下来记录一下,我的这个是针对四位数的,更高的也可以适当向上拓展,我写的时候里面比较麻烦的就是结果重复问题了,用了个静态变量就好了,我的具体思想就是得到一个四位数,将它分开成4个数字,求全排列和全排列对应的值,这里面有重复数字的时候全排列就会重复,确实蛋疼,不过还是解决了。好吧,看代码吧。
public class Main {
private static int lastNumber = 0 ;
private void magicNumber () {
int [] nums = new int [4 ];
for (int i = 1000 ; i < 10000 ; i++) {
if (i % 100 == 0 ) {
continue ;
}
int t = i;
nums[0 ] = t / 1000 ;
t %= 1000 ;
nums[1 ] = t / 100 ;
t %= 100 ;
nums[2 ] = t / 10 ;
nums[3 ] = t % 10 ;
isMagic(i, nums, 0 );
}
}
private void isMagic (int number, int [] nums, int index) {
int a, b;
for (int i = index; i < nums.length; i++) {
int t = nums[index];
nums[index] = nums[i];
nums[i] = t;
a = nums[0 ] * 10 + nums[1 ];
b = nums[2 ] * 10 + nums[3 ];
if (a * b == number) {
if (number == lastNumber) {
break ;
}
System.out.println(a + " * " + b + " = " + number);
lastNumber = number;
}
isMagic(number, nums, index + 1 );
t = nums[index];
nums[index] = nums[i];
nums[i] = t;
}
}
public static void main (String[] args) {
long t1 = System.currentTimeMillis();
Main main = new Main();
main.magicNumber();
System.out.println(System.currentTimeMillis() - t1);
}
}
不足之处请多多包涵,错误欢迎指出