題目:吸血鬼數(shù)字是指位數(shù)為偶數(shù)的數(shù)字,可以由一對(duì)數(shù)字相乘而得到,而對(duì)數(shù)字各包含乘積的一半數(shù)的數(shù)字,其中從最初的數(shù)字中選取的數(shù)字可以任意排序。以兩個(gè)0結(jié)尾的數(shù)字是不允許的,列如:
1260=21*60;
1827=21*87;
2187=27*81;
請(qǐng)寫出一個(gè)程序,找出所有的4位吸血鬼數(shù)字。
解:反過來想,不從考慮某個(gè)數(shù)(1001到9999)是不是吸血鬼數(shù),而是遍歷2位數(shù)相乘,看是否符合某種規(guī)則,符合的話,他們的積就是吸血鬼數(shù)
package test1;
import java.util.Arrays;
import java.util.Scanner;
/**
* 吸血鬼數(shù)字:位數(shù)為偶數(shù),可以由一對(duì)數(shù)字相乘而得,這對(duì)數(shù)字分別是吸血鬼數(shù)字的一半位數(shù)的,順序不規(guī)定<br>
* 1260=12*60, 1827=21*87
*/
public class Vampire {
public static void main(String[] args) {
System.out.printf("Please enter the length of the num : ");
Scanner s = new Scanner(System.in);
int x = s.nextInt();
calVampire(x);
}
public static void calVampire(int n) {
if (n % 2 != 0)
return;
else {
int subLength = n / 2;
int total = 0;
int min = (int) Math.pow(10, subLength - 1);
int max = (int) Math.pow(10, subLength) - 1;
for (int p = min; p <= max; p++) {
for (int k = p + 1; k <= max; k++) {
int val = p * k;
if (val > 9999 || val < 1000)
continue;
String[] s1 = String.valueOf(val).split("");
String[] s2 = (String.valueOf(p) + String.valueOf(k))
.split("");
Arrays.sort(s1);
Arrays.sort(s2);
if (Arrays.equals(s1, s2)) {
total++;
System.out.println(p + " * " + k + "=" + val);
}
}
}
System.out.println("Total num is : " + total);
}
}
}
只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||