https://pastein.ru/t/_-

  скопируйте уникальную ссылку для отправки


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);
    }                                                  
}