package test3;
import java.math.BigInteger;
public class Flower {
//求一个数的x次方
public static BigInteger p(int x){
BigInteger base = BigInteger.ONE;
for(int i=0;i<21;i++){
base = base.multiply(BigInteger.valueOf(x));
}
return base;
}
//求和
public static void ji_suan(BigInteger[] pw,int[] nn){
BigInteger sum = BigInteger.ZERO;
for(int i = 0;i<10;i++){
sum = sum.add(pw[i].multiply(BigInteger.valueOf(nn[i])));
}
String s = ""+sum;
if(s.length()!=21)
return;
//确定和中各个数字出现多少次数
int[] nn2 = new int[10];
for(int i=0;i<21;i++){
nn2[s.charAt(i)-'0']++;
}
//测试是否与nn[]中各个对应位置数目相同
for(int i=0;i<10;i++){
if(nn[i] != nn2[i])
return;
}
System.out.println(s);
}
public static void f(BigInteger[] pw,int[] nn,int cur,int use){
if(cur==9){
nn[9] =21-use;
ji_suan(pw,nn);
return;
}
for(int i=0;i<=21-use;i++){
nn[cur]=i;
f(pw,nn,cur,use+i);
}
}
//主函数
public static void main(String[] args){
BigInteger[] pw = {p(0),p(1),p(2),p(3),p(4),p(5),p(6),p(7),p(8),p(9)};
//0~9在21位数中出现的次数
int[] nn = new int[10];
f(pw,nn,0,0);
}
}
|