Мужики,сижу уже две недели с этой задачей, пока не решу не перейду. Прогресс есть. Уже выполняет до 14 знаков , но на лонге виснет в конец. Алгоритм 1)генерация чисел не возрастающими цифрами 2) формирование двумерного массива степеней 3) сумма степеней первый раз для формирования потенциального числа армстронга 4) повторная операция для окончательной проверки. Не пойму где можно еще пофиксить, может какие операции ресурсоемкие?
import java.sql.SQLOutput;
import java.util.Iterator;
import java.util.TreeSet;
public class Solution {
    public static TreeSet<Long> list = new TreeSet<Long>();
    public static long[][] mass;
    static {
        mass = new long[10][20];
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j < 20; j++) {
                mass[i][j] = (long) Math.pow(i, j);
            }
        }
    }
    public static void main(String[] args) {
        long N = 13900000000011L;
        long numb = 0;
        while (numb < N) {
            numb++;
            int k = 1;
            long buf = 0;
            int count = 0;
            if (numb % 10 != 0) fuck1(numb);
            else {
                while ((numb) % (k * 10) == 0) {
                    k = k * 10;
                    buf = numb / k;
                    count++;
                }
                long end = buf % 10;
                buf = buf * (int) Math.pow(10, count);
                for (int i = 1; i < count + 1; i++) {
                    buf = buf + end * (int) Math.pow(10, count - i);
                }
                fuck1(numb);
                numb = buf;
            }
        }
        System.out.println(list);
    }
    public static long func(int i, int j) {
        return Solution.mass[i][j];
    }
    public static void fuck1(long s) {
        long temp = s;
        long sum = 0;
        long ost = 0;
        int deg = (int) Math.log10(temp) + 1;
        int i = 0;
        while (i < deg) {
            ost = temp % 10;
            sum = sum + func((int) ost, deg);
            temp = temp / 10;
            i++;
        }
        long numb2 = sum;
        temp = sum;
        sum = 0;
        i = 0;
        while (i < deg) {
            ost = temp % 10;
            sum = sum + func((int) ost, deg);
            temp = temp / 10;
            i++;
        }
        if (sum == numb2) list.add(sum);
    }
}