public class Solution {
static long[][] sumArray = getSumNumberArray();
static List<Long> listArmst = new ArrayList<>();
public static long[] getNumbers(long N){
long[] result = null;
long chislo = 1;
long sum;
while (chislo<N){
if (chislo%10==0){
long subChislo=chislo;
int ost=0;
while(ost==0){
subChislo = subChislo/10;
ost = (int) (subChislo%10);
if (ost!=0){
chislo+=ost;
sum = getSum(chislo);
if (sum == getSum(sum)&&!listArmst.contains(sum)){listArmst.add(sum);}
//System.out.println(chislo+" sum=="+sum);
}
else {
int step=1;
int ost2=0;
long sub2=subChislo;
while((ost2=(int) (sub2%10))==0){
sub2 = sub2/10;
step++;
}
chislo+=(ost2*Math.pow(10, step-1));
sum = getSum(chislo);
if (sum == getSum(sum)&&!listArmst.contains(sum)){listArmst.add(sum);}
//System.out.println(chislo+" sum=="+sum);
}
}
}
else{
while (chislo%10>0){
chislo+=1;
sum = getSum(chislo);
if (sum == getSum(sum)&&!listArmst.contains(sum)){listArmst.add(sum);}
//System.out.println(chislo+" sum=="+sum);
}
}
}
result = new long[listArmst.size()];
Collections.sort(listArmst);
for (int i=0;i<listArmst.size();i++){
result[i]=listArmst.get(i);
}
return result;}
public static long getSum(long chislo){
if (chislo==0){return 0;}
else {
int stepen = (int) Math.ceil(Math.log10(chislo + 0.5));
long sum=0;
char[] arrChislo = Long.toString(chislo).toCharArray();
for (int i=0;i<arrChislo.length;i++){
sum+=sumArray[Integer.parseInt(arrChislo[i]+"")][stepen-1];
}
return sum;}
}
public static long[][] getSumNumberArray(){
long[][] arr = new long[10][19];
int a = 0;
for(int b=1;b<20;a++){
if (a==10){a=-1;b++;}
else{arr[a][b-1]=(long)Math.pow(a, b);
}
}
return arr;
}
public static void main(String[] args) {
Date date1 = new Date();
long start = date1.getTime();
long[] arrArmstrong = getNumbers(92233720368547758l);
Date date2 = new Date();
long finish = date2.getTime();
System.out.println(Arrays.toString(arrArmstrong));
System.out.println((finish-start));
System.out.println(Long.MAX_VALUE);
}
}