一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。
例如:
当N=3时,153就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水仙花数(其中,“^”表示乘方,5^3表示5的3次方,也就是立方)。
当N=4时,1634满足条件,因为 1^4 + 6^4 + 3^4 + 4^4 = 1634。
当N=5时,92727满足条件。
例如:
当N=3时,153就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水仙花数(其中,“^”表示乘方,5^3表示5的3次方,也就是立方)。
当N=4时,1634满足条件,因为 1^4 + 6^4 + 3^4 + 4^4 = 1634。
当N=5时,92727满足条件。
实际上,对N的每个取值,可能有多个数字满足条件。
程序的任务是:求N=21时,所有满足条件的花朵数。注意:这个整数有21位,它的各个位数字的21次方之和正好等于这个数本身。
跑的巨慢,用时三分多点,不满足题目的一分钟要求了,但还是求出来了,想办法优化下也许能达到要求
import java.math.BigInteger;
import java.util.Arrays;
public class test{
public static void main(String[] args) {
num[0] = 21;
for(int i = 1;i < 10;i++){
num[i] = 0;
}
new recursive(num,0,21);
}
static int[] num = new int[10];
static class recursive{
int[] num;
int size;
int loc;
recursive(int[] num,int loc,int size){
this.num = num;
this.loc = loc;
this.size = size;
this.search();
}
void search() {
if(loc == 10){
end();
return;
}
if(size == 0){
end();
return;
}
for(int i = 0; i < size;i++){
int[] inNum = num;
inNum[loc] = i;
new recursive(inNum,loc+1,size-i);
}
}
void end(){
BigInteger sum = new BigInteger("0");
BigInteger ten = new BigInteger("10");
int[] inNum = new int[21];
int loction = 0;
for(int i = 0;i < 10;i++){
BigInteger mult = new BigInteger(num[i]+"");
for(int j = 0;j < num[i];j++){
inNum[loction++] = i;
}
BigInteger nums = new BigInteger(i + "");
sum = sum.add(nums.pow(21).multiply(mult));
}
if(sum.compareTo(ten.pow(20)) > 0 && sum.compareTo(ten.pow(21)) < 0){
int[] enSum = new int[21];
for(int i = 0;i < 21;i++){
String place = sum.toString();
if(i < place.length()){
enSum[i] = Integer.parseInt((sum.toString().charAt(i)+""));
}else{
enSum[i] = 0;
}
}
// System.out.println(sum);
// System.out.print("enSum[]:");
// for(int i = 0;i < 21;i++){
// System.out.print(enSum[i]);
// }
// System.out.println();
Arrays.sort(enSum);
Arrays.sort(inNum);
// System.out.print("inNum[]:");
// for(int i = 0;i < 21;i++){
// System.out.print(inNum[i]);
// }
// System.out.println();
if(Arrays.equals(enSum,inNum)){
System.out.println(sum);
}
}
}
}
}