При больших числах программа виснет...
Подскажите есть способ улучшить этот вариант?
package com.javarush.task.task20.task2025;
import java.util.*;
import static java.lang.Long.MAX_VALUE;
import static java.lang.Long.lowestOneBit;
/*
Алгоритмы-числа
*/
public class Solution {
public static long[] getNumbers(long n) {
long[] result;
ArrayList<Long> arrayList = new ArrayList<>();
long m;
long temp;
for (long i = 1; i < n; i++) {
long s = 0;
String text = Long.toString(i);
m = text.length(); //Получение длины цифры
//System.out.println("dlina="+m);
temp = i;
while (temp > 0) {
long digit = temp % 10;
temp /= 10;
long x =1;
for (long j = 0; j < m ; ++j) {
x = x*digit;
// System.out.println("digit="+x);
}
s =x + s;
// System.out.println("s ="+s);
}
if (s == i) {
arrayList.add(s);
}
}
result = new long[arrayList.size()];
for (int i = 0; i < arrayList.size(); i++) {
result[i] = arrayList.get(i);
}
return result;
}
public static void main(String[] args) {
System.out.println(Arrays.toString(getNumbers(10000000L)));
}
}