您的位置:首页 > 其它

21位水仙花数

2018-03-31 20:18 411 查看
很明显,21位的这个数字是一个超级大的。即使使用java中的超级整型BigInteger一个一个遍历也是非常吃力的

解法:

遍历出 0 - 9 这 10 个数,每个数出现的次数。
然后求出和。
去判断求出的和,是否 其中 0-9 这10个数出现的次数 是否匹配import java.io.BufferedReader;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Main {

static BigInteger[] mly = new BigInteger[10];

static int[] weight = new int[10];

static int countNUM = 0;
public static void main(String[] args){
initNum();
all(0,21);
System.out.println(countNUM);
}

public static void all(int index,int count){
if(index==9){
weight[9] = count;

if(check()){
countNUM++;
}
}else{
for(int i=0;i<=count;i++){
weight[index] = i;
all(index+1,count-i);
}
}

}

public static boolean check(){
BigInteger resNum = BigInteger.ZERO;
for(int i=0;i<10;i++){
resNum = resNum.add(mly[i].multiply(new BigInteger(weight[i]+"")));
}

int[] tempnum = new int[10];
String strNum = resNum.toString();
for(int i=0;i<strNum.length();i++){
tempnum[strNum.charAt(i)-'0']++;
}

for(int i=0;i<10;i++){
if(tempnum[i]!=weight[i])return false;
}

System.out.println(strNum);
return true;

}

public static void initNum(){
for(int i=0;i<10;i++){
mly[i] = (new BigInteger(""+i)).pow(21);
}
}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: