多位水仙花数算法
1.递归(用时16-20s;写起来非常方便,非常爽):
import java.math.BigInteger;
import java.util.ArrayList;
/**
* 三位的水仙花数共有4个:153,370,371,407;
四位的水仙花数共有3个:1634,8208,9474;
五位的水仙花数共有3个:54748,92727,93084;
六位的水仙花数只有1个:548834;
七位的水仙花数共有4个:1741725,4210818,9800817,9926315;
八位的水仙花数共有3个:24678050,24678051,88593477
* @author Administrator
*ps : 把new BigInteger(),改为BigInteger.valueof(); 把运行时间从35秒减低到20秒
*/
public class FlowerNumber_simple {
private int size;
private ArrayList<BigInteger> resultLists;
private int[] base_num_count;
private BigInteger[] subResult;
public FlowerNumber_simple(int size){
this.size = size;
resultLists = new ArrayList<BigInteger>();
base_num_count = new int[10];
subResult = new BigInteger[10];
/*for(int i=0;i<10;i++){
subResult[i] = new BigInteger(i+"").pow(size);
}*/
for(int i = 0; i < 10; ++i){
//subResult[i] = BigInteger.valueOf(i).pow(this.level);
subResult[i] = BigInteger.ONE;
for(int j = 0; j < size; ++j){
subResult[i] = subResult[i].multiply(BigInteger.valueOf(i));
}
}
}
public static void main(String[] args) {
FlowerNumber_simple fn = new FlowerNumber_simple(2